From 5f46dcb875f1d13fcb9cf58883369940d8ba1f76 Mon Sep 17 00:00:00 2001 From: Bastian Germann Date: Fri, 7 Aug 2020 12:03:11 +0100 Subject: [PATCH] Import pymupdf_1.17.4+ds1.orig.tar.xz [dgit import orig pymupdf_1.17.4+ds1.orig.tar.xz] --- .github/ISSUE_TEMPLATE/bug_report.md | 32 + .github/ISSUE_TEMPLATE/feature_request.md | 20 + .github/ISSUE_TEMPLATE/general-purpose.md | 10 + .gitignore | 6 + .vs/ProjectSettings.json | 3 + .vs/PyMuPDF/v15/.suo | Bin 0 -> 15360 bytes .vs/PyMuPDF/v15/Browse.VC.db | Bin 0 -> 827392 bytes .vs/VSWorkspaceState.json | 7 + .vs/slnx.sqlite | Bin 0 -> 126976 bytes COPYING | 674 ++ GNU AFFERO GPL V3 | 661 ++ PKG-INFO | 80 + README.md | 106 + demo/pymupdf.jpg | Bin 0 -> 10729 bytes docs/PyMuPDF.ico | Bin 0 -> 3262 bytes docs/algebra.rst | 199 + docs/annot.rst | 418 + docs/app1.rst | 162 + docs/app2.rst | 321 + docs/app3.rst | 32 + docs/app4.rst | 241 + docs/changes.rst | 751 ++ docs/classes.rst | 28 + docs/colors.rst | 43 + docs/colorspace.rst | 39 + docs/conf.py | 248 + docs/coop_low.rst | 71 + docs/device.rst | 33 + docs/displaylist.rst | 92 + docs/document.rst | 1120 +++ docs/faq.rst | 2135 +++++ docs/font.rst | 141 + docs/functions.rst | 704 ++ docs/glossary.rst | 118 + docs/identity.rst | 16 + docs/images/img-4up.png | Bin 0 -> 350259 bytes docs/images/img-7edges.png | Bin 0 -> 4657 bytes docs/images/img-a-is--1.png | Bin 0 -> 23350 bytes docs/images/img-adobe.png | Bin 0 -> 4332 bytes docs/images/img-alpha-0.png | Bin 0 -> 3806 bytes docs/images/img-alpha-1.png | Bin 0 -> 5246 bytes docs/images/img-annots.jpg | Bin 0 -> 68554 bytes docs/images/img-attach-result.jpg | Bin 0 -> 60991 bytes docs/images/img-b-is-0.5.png | Bin 0 -> 40594 bytes docs/images/img-binsetupdirs.png | Bin 0 -> 1379 bytes docs/images/img-breadth.png | Bin 0 -> 20516 bytes docs/images/img-c-is-0.5.png | Bin 0 -> 22178 bytes docs/images/img-cake.png | Bin 0 -> 9163 bytes docs/images/img-caret-annot.jpg | Bin 0 -> 7925 bytes docs/images/img-circle.png | Bin 0 -> 23679 bytes docs/images/img-clip.jpg | Bin 0 -> 14161 bytes docs/images/img-colordb.png | Bin 0 -> 70022 bytes docs/images/img-copy-speed-1.png | Bin 0 -> 24111 bytes docs/images/img-copy-speed-2.png | Bin 0 -> 22922 bytes docs/images/img-d-is--1.png | Bin 0 -> 23581 bytes docs/images/img-drawBezier.png | Bin 0 -> 10498 bytes docs/images/img-drawCurve.png | Bin 0 -> 9524 bytes docs/images/img-drawSector1.png | Bin 0 -> 7411 bytes docs/images/img-drawSector2.png | Bin 0 -> 9327 bytes docs/images/img-drawcircle.jpg | Bin 0 -> 14820 bytes docs/images/img-drawquad.jpg | Bin 0 -> 50786 bytes docs/images/img-e-is-100.png | Bin 0 -> 13508 bytes docs/images/img-embed-progress.jpg | Bin 0 -> 43499 bytes docs/images/img-encoding.jpg | Bin 0 -> 41443 bytes docs/images/img-encrypting.jpg | Bin 0 -> 55776 bytes docs/images/img-even-odd.png | Bin 0 -> 83760 bytes docs/images/img-extract-imga.jpg | Bin 0 -> 43357 bytes docs/images/img-extract-imgb.jpg | Bin 0 -> 45103 bytes docs/images/img-f-is-100.png | Bin 0 -> 23383 bytes docs/images/img-filesizes.png | Bin 0 -> 9915 bytes docs/images/img-freetext.jpg | Bin 0 -> 21007 bytes docs/images/img-import-progress.jpg | Bin 0 -> 43065 bytes docs/images/img-inkannot.jpg | Bin 0 -> 23536 bytes docs/images/img-inserttext.jpg | Bin 0 -> 52121 bytes docs/images/img-markedpdf.jpg | Bin 0 -> 95395 bytes docs/images/img-markers.jpg | Bin 0 -> 48248 bytes docs/images/img-matrix.png | Bin 0 -> 979 bytes docs/images/img-opacity.jpg | Bin 0 -> 4331 bytes docs/images/img-original.png | Bin 0 -> 34187 bytes docs/images/img-pdfjoiner.jpg | Bin 0 -> 112394 bytes docs/images/img-pdftext.jpg | Bin 0 -> 334216 bytes docs/images/img-planish.png | Bin 0 -> 21669 bytes docs/images/img-point-unit.jpg | Bin 0 -> 18035 bytes docs/images/img-polyline.png | Bin 0 -> 9656 bytes docs/images/img-posterize.png | Bin 0 -> 389374 bytes docs/images/img-pymupdf.jpg | Bin 0 -> 10729 bytes docs/images/img-quads.jpg | Bin 0 -> 21741 bytes docs/images/img-redact.jpg | Bin 0 -> 43354 bytes docs/images/img-render-speed.png | Bin 0 -> 6575 bytes docs/images/img-rendermode.jpg | Bin 0 -> 25864 bytes docs/images/img-rot+morph.png | Bin 0 -> 17684 bytes docs/images/img-rot-60.png | Bin 0 -> 37136 bytes docs/images/img-rotate.png | Bin 0 -> 10424 bytes docs/images/img-showpdfpage.jpg | Bin 0 -> 17818 bytes docs/images/img-sierpinski.png | Bin 0 -> 14577 bytes docs/images/img-squiggly.png | Bin 0 -> 34483 bytes docs/images/img-stampannot.jpg | Bin 0 -> 13258 bytes docs/images/img-stencil.jpg | Bin 0 -> 38163 bytes docs/images/img-symbols.jpg | Bin 0 -> 70456 bytes docs/images/img-target.png | Bin 0 -> 29644 bytes docs/images/img-textbox.jpg | Bin 0 -> 36781 bytes docs/images/img-textboxtract.png | Bin 0 -> 71029 bytes docs/images/img-textmarker.jpg | Bin 0 -> 17195 bytes docs/images/img-textmethods.png | Bin 0 -> 5885 bytes docs/images/img-textpage-char.png | Bin 0 -> 6692 bytes docs/images/img-textpage.png | Bin 0 -> 90614 bytes docs/images/img-textperformance.png | Bin 0 -> 9398 bytes docs/images/img-timings.png | Bin 0 -> 2172 bytes docs/images/img-writeimage.png | Bin 0 -> 2589 bytes docs/images/mupdf-icons.jpg | Bin 0 -> 21563 bytes docs/index.rst | 22 + docs/installation.rst | 64 + docs/intro.rst | 59 + docs/irect.rst | 207 + docs/kerning.style | 18 + docs/link.rst | 104 + docs/linkdest.rst | 99 + docs/lowlevel.rst | 11 + docs/make-bold.py | 76 + docs/matrix.rst | 243 + docs/module.rst | 411 + docs/multiprocess-gui.py | 167 + docs/multiprocess-render.py | 79 + docs/new-annots.py | 172 + docs/outline.rst | 73 + docs/page.rst | 1236 +++ docs/pixmap.rst | 453 + docs/point.rst | 102 + docs/pymupdf-logo.jpg | Bin 0 -> 6190 bytes docs/quad.rst | 143 + docs/rect.rst | 270 + docs/replace-fonts.py | 105 + docs/shape.rst | 566 ++ docs/text-lister.py | 40 + docs/textpage.rst | 255 + docs/textwriter.rst | 106 + docs/tools.rst | 248 + docs/tutorial.rst | 351 + docs/vars.rst | 449 + docs/version.rst | 6 + docs/wheelnames.txt | 21 + docs/widget.rst | 168 + fitz/__init__.py | 105 + fitz/__main__.py | 782 ++ fitz/fitz.i | 9443 +++++++++++++++++++++ fitz/helper-annot.i | 445 + fitz/helper-convert.i | 84 + fitz/helper-defines.i | 400 + fitz/helper-fields.i | 977 +++ fitz/helper-geo-c.i | 196 + fitz/helper-geo-py.i | 983 +++ fitz/helper-other.i | 868 ++ fitz/helper-pdfinfo.i | 231 + fitz/helper-pixmap.i | 352 + fitz/helper-portfolio.i | 66 + fitz/helper-python.i | 1439 ++++ fitz/helper-select.i | 374 + fitz/helper-stext.i | 581 ++ fitz/helper-xobject.i | 217 + fitz/utils.py | 3601 ++++++++ fitz/version.i | 6 + installation/.DS_Store | Bin 0 -> 6148 bytes installation/centos/centos_pymupdf.sh | 17 + installation/freebsd/freebsd_pymupdf.sh | 22 + installation/ubuntu/ubuntu_pymupdf.sh | 20 + setup.py | 94 + 166 files changed, 36138 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/general-purpose.md create mode 100644 .gitignore create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/PyMuPDF/v15/.suo create mode 100644 .vs/PyMuPDF/v15/Browse.VC.db create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/slnx.sqlite create mode 100644 COPYING create mode 100644 GNU AFFERO GPL V3 create mode 100644 PKG-INFO create mode 100644 README.md create mode 100644 demo/pymupdf.jpg create mode 100644 docs/PyMuPDF.ico create mode 100644 docs/algebra.rst create mode 100644 docs/annot.rst create mode 100644 docs/app1.rst create mode 100644 docs/app2.rst create mode 100644 docs/app3.rst create mode 100644 docs/app4.rst create mode 100644 docs/changes.rst create mode 100644 docs/classes.rst create mode 100644 docs/colors.rst create mode 100644 docs/colorspace.rst create mode 100644 docs/conf.py create mode 100644 docs/coop_low.rst create mode 100644 docs/device.rst create mode 100644 docs/displaylist.rst create mode 100644 docs/document.rst create mode 100644 docs/faq.rst create mode 100644 docs/font.rst create mode 100644 docs/functions.rst create mode 100644 docs/glossary.rst create mode 100644 docs/identity.rst create mode 100644 docs/images/img-4up.png create mode 100644 docs/images/img-7edges.png create mode 100644 docs/images/img-a-is--1.png create mode 100644 docs/images/img-adobe.png create mode 100644 docs/images/img-alpha-0.png create mode 100644 docs/images/img-alpha-1.png create mode 100644 docs/images/img-annots.jpg create mode 100644 docs/images/img-attach-result.jpg create mode 100644 docs/images/img-b-is-0.5.png create mode 100644 docs/images/img-binsetupdirs.png create mode 100644 docs/images/img-breadth.png create mode 100644 docs/images/img-c-is-0.5.png create mode 100644 docs/images/img-cake.png create mode 100644 docs/images/img-caret-annot.jpg create mode 100644 docs/images/img-circle.png create mode 100644 docs/images/img-clip.jpg create mode 100644 docs/images/img-colordb.png create mode 100644 docs/images/img-copy-speed-1.png create mode 100644 docs/images/img-copy-speed-2.png create mode 100644 docs/images/img-d-is--1.png create mode 100644 docs/images/img-drawBezier.png create mode 100644 docs/images/img-drawCurve.png create mode 100644 docs/images/img-drawSector1.png create mode 100644 docs/images/img-drawSector2.png create mode 100644 docs/images/img-drawcircle.jpg create mode 100644 docs/images/img-drawquad.jpg create mode 100644 docs/images/img-e-is-100.png create mode 100644 docs/images/img-embed-progress.jpg create mode 100644 docs/images/img-encoding.jpg create mode 100644 docs/images/img-encrypting.jpg create mode 100644 docs/images/img-even-odd.png create mode 100644 docs/images/img-extract-imga.jpg create mode 100644 docs/images/img-extract-imgb.jpg create mode 100644 docs/images/img-f-is-100.png create mode 100644 docs/images/img-filesizes.png create mode 100644 docs/images/img-freetext.jpg create mode 100644 docs/images/img-import-progress.jpg create mode 100644 docs/images/img-inkannot.jpg create mode 100644 docs/images/img-inserttext.jpg create mode 100644 docs/images/img-markedpdf.jpg create mode 100644 docs/images/img-markers.jpg create mode 100644 docs/images/img-matrix.png create mode 100644 docs/images/img-opacity.jpg create mode 100644 docs/images/img-original.png create mode 100644 docs/images/img-pdfjoiner.jpg create mode 100644 docs/images/img-pdftext.jpg create mode 100644 docs/images/img-planish.png create mode 100644 docs/images/img-point-unit.jpg create mode 100644 docs/images/img-polyline.png create mode 100644 docs/images/img-posterize.png create mode 100644 docs/images/img-pymupdf.jpg create mode 100644 docs/images/img-quads.jpg create mode 100644 docs/images/img-redact.jpg create mode 100644 docs/images/img-render-speed.png create mode 100644 docs/images/img-rendermode.jpg create mode 100644 docs/images/img-rot+morph.png create mode 100644 docs/images/img-rot-60.png create mode 100644 docs/images/img-rotate.png create mode 100644 docs/images/img-showpdfpage.jpg create mode 100644 docs/images/img-sierpinski.png create mode 100644 docs/images/img-squiggly.png create mode 100644 docs/images/img-stampannot.jpg create mode 100644 docs/images/img-stencil.jpg create mode 100644 docs/images/img-symbols.jpg create mode 100644 docs/images/img-target.png create mode 100644 docs/images/img-textbox.jpg create mode 100644 docs/images/img-textboxtract.png create mode 100644 docs/images/img-textmarker.jpg create mode 100644 docs/images/img-textmethods.png create mode 100644 docs/images/img-textpage-char.png create mode 100644 docs/images/img-textpage.png create mode 100644 docs/images/img-textperformance.png create mode 100644 docs/images/img-timings.png create mode 100644 docs/images/img-writeimage.png create mode 100644 docs/images/mupdf-icons.jpg create mode 100644 docs/index.rst create mode 100644 docs/installation.rst create mode 100644 docs/intro.rst create mode 100644 docs/irect.rst create mode 100644 docs/kerning.style create mode 100644 docs/link.rst create mode 100644 docs/linkdest.rst create mode 100644 docs/lowlevel.rst create mode 100644 docs/make-bold.py create mode 100644 docs/matrix.rst create mode 100644 docs/module.rst create mode 100644 docs/multiprocess-gui.py create mode 100644 docs/multiprocess-render.py create mode 100644 docs/new-annots.py create mode 100644 docs/outline.rst create mode 100644 docs/page.rst create mode 100644 docs/pixmap.rst create mode 100644 docs/point.rst create mode 100644 docs/pymupdf-logo.jpg create mode 100644 docs/quad.rst create mode 100644 docs/rect.rst create mode 100644 docs/replace-fonts.py create mode 100644 docs/shape.rst create mode 100644 docs/text-lister.py create mode 100644 docs/textpage.rst create mode 100644 docs/textwriter.rst create mode 100644 docs/tools.rst create mode 100644 docs/tutorial.rst create mode 100644 docs/vars.rst create mode 100644 docs/version.rst create mode 100644 docs/wheelnames.txt create mode 100644 docs/widget.rst create mode 100644 fitz/__init__.py create mode 100644 fitz/__main__.py create mode 100644 fitz/fitz.i create mode 100644 fitz/helper-annot.i create mode 100644 fitz/helper-convert.i create mode 100644 fitz/helper-defines.i create mode 100644 fitz/helper-fields.i create mode 100644 fitz/helper-geo-c.i create mode 100644 fitz/helper-geo-py.i create mode 100644 fitz/helper-other.i create mode 100644 fitz/helper-pdfinfo.i create mode 100644 fitz/helper-pixmap.i create mode 100644 fitz/helper-portfolio.i create mode 100644 fitz/helper-python.i create mode 100644 fitz/helper-select.i create mode 100644 fitz/helper-stext.i create mode 100644 fitz/helper-xobject.i create mode 100644 fitz/utils.py create mode 100644 fitz/version.i create mode 100644 installation/.DS_Store create mode 100644 installation/centos/centos_pymupdf.sh create mode 100644 installation/freebsd/freebsd_pymupdf.sh create mode 100644 installation/ubuntu/ubuntu_pymupdf.sh create mode 100644 setup.py diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..e89c89c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,32 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: JorjMcKie + +--- + +_**Please provide all mandatory information!**_ + +## Describe the bug (mandatory) +A clear and concise description of what the bug is. + +## To Reproduce (mandatory) +Explain the steps to reproduce the behavior, For example, include a minimal code snippet, example files, etc. + +## Expected behavior (optional) +Describe what you expected to happen (if not obvious). + +## Screenshots (optional) +If applicable, add screenshots to help explain your problem. + +## Your configuration (mandatory) + - Operating system, potentially version and bitness + - Python version, bitness + - PyMuPDF version, installation method (**wheel** or **generated** from source). + +For example, the output of `print(sys.version, "\n", sys.platform, "\n", fitz.__doc__)` would be sufficient (for the first two bullets). + +## Additional context (optional) +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..f5ed2dc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: JorjMcKie + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Potentially add an issue reference. + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +Are there several options for how your request could be met? + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/general-purpose.md b/.github/ISSUE_TEMPLATE/general-purpose.md new file mode 100644 index 0000000..59dd59c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/general-purpose.md @@ -0,0 +1,10 @@ +--- +name: General Purpose +about: Use this form for questions, comments, etc. +title: 'Question / Comment:' +labels: question +assignees: JorjMcKie + +--- + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e55e79d --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*.pyc +*.so +*.o +*.swp +build/ +demo/README.rst diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..d33b3d6 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": "Keine Konfigurationen" +} \ No newline at end of file diff --git a/.vs/PyMuPDF/v15/.suo b/.vs/PyMuPDF/v15/.suo new file mode 100644 index 0000000000000000000000000000000000000000..f061189d72a6f195a2d74b30421a1ec2834cb91d GIT binary patch literal 15360 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 S(trP30OX}rq-rG1LjMmm!3bIa literal 0 HcmV?d00001 diff --git a/docs/images/img-embed-progress.jpg b/docs/images/img-embed-progress.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c37fe26242e74e1f57a40bc401347142ad39a098 GIT binary patch literal 43499 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-encoding.jpg b/docs/images/img-encoding.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02ce10581677a95f87a002390bbcc604b3161779 GIT binary patch literal 41443 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 E0phJ7O#lD@ literal 0 HcmV?d00001 diff --git a/docs/images/img-f-is-100.png b/docs/images/img-f-is-100.png new file mode 100644 index 0000000000000000000000000000000000000000..61a8fac398f17ecc6aa40ceb7cdabe5530767a2c GIT binary patch literal 23383 zcmbTcV~{Sv(=Rx-p0RD)wr$Uxv2EM7ZQHhOow4mRbLO7^`^N6QcVj>7-Hu;(RAfbU zqO!8Ht1?niUIHEl8wLmn2wqB3R2c{eL>~wUSQHB6AI0;uyb%aU2VY85NY!KOdZ!V7 zh!H7lG5Lh983d>E7bd#kMH56)H;E}sIS3f@-G%n0f#Ht_!g2fc^vPMv${ zZSp>ITxUD@-P@AK6Muuj0xEMy>qdZq2xI>z?gcEtfc`(i3J6G@1jvW^e;NMYuL@uV z`48%U0|l%?0WJNX;CNzb4J;rscldlm!$SaimWMF>AS9F5j#x8rj- z7#NGiX^ahazun<-K8+C+6@A7PKbptC~R$Q zWzUu)BqsJEFH%Ak6Wu+YOxCE=&CJaF_+0P*D`)S8@~BX#I5IL~DDS#nrza7IyV>b{ z_HwnJ|15KDx7~I#l}aNy`*b!>z~crt>2)*~YseVUjM?x1;};`jrQhWOjYFZ3CrY+@ z;qp&MrDKWWQDdP4xg1UbfKOb&Z}DJkgBd|7f9>{zST&l3iJuCW|$SD5d+^Tp!E z#>NO`xQfb3p~uqF(pVf0gxsdWLZi3aUF=v0_xG22|JcEdJTYLs9*@TPvtc|iV&bBS zc=1kMd^EJsFp3bOVMdazy}h`#2=t8nd;?wGo!#Bo3&;w+SgJA%_w8SQr=@+S*-KtJJt38{_<8GXJH4e?36YVXa1s(ry3G-kahzQWP{a zv`iZ9AgHj35hbd$oZKixnMfn!+3U?VA0J-?Hz`@#Z^Ovhlj-zUZ8~n^%hM96WKpG+ zs~3wL?p%ZyfQ-HpWnvj-FnnM{1m&X+NeqF&Ur>VgfK@9x1_p^>pK+eOzSH@?TwOli@1$-n&-|2#vgGDmBw-bi)&?)fyxu4~LNG|1r$z zD1#r<5E|8=to0s<{pkO=Dq_;#q;(scl!%CkzxCg(4S#5A6aTeQszgOaM=VH*iH%v2 z0e}aQ%6~-6*nh+rabjX(aS{Lkkp3G90BB_U*Uf|-`M>r4B1F3P;NAG=tx2R(Xy{4= zH8ePf1|aq8S8m=z@2ygo$lvAfJKwMNbL>DSlc>a%ftkOR&{sHx0 zC;$LF{C{yO{*OqDlK;0vQzy)=(vd%CFrD{08-7km=Ar(PvgoDCRF2E{K^5j;|B(pI z$+LgZ>95;rr%o#3b~l-nV8WzH(^}o%=6342otpD&7Q-0>XaOzR7H;j@q;IYF-w~si z9ZE_D%PY4pANjE^|8y58L6$)-xk9`Y_)~mi@P09utZ@e(B=p>4muqxX*lh51QFmv{ zx3aMoc}ekw)hTPn7`+{@x8wX-wP__G3*!&u`>^%Rz4Lk*%$+YVU`R?_WKM#;cq3X} zTv=>BV6vDg+N%Wz24a<3Rn&*(Y1shh<>Qwk42EN-esolXa%gzC^9l9<>?yPMm6 zzb|DyXLHFU2S$2`U#W}KrZz3wNhOD0*X#8jC^4*=4E|N?2q<=PVg^8XQ%rQ#mm!J2NghPTsv3)7ABR^(eM(a>6@V z;LB&S*ed$p4nLbXeB8y_wN`hxch{@=4D~roZ8HRLZSIIYPOD#!Rb!uRb*0VZt*(f; zy*}GF555PkSIewY`@3ExwcS6i))?`0G=eXv|Cu^WuHz=kU<==!^7+NGqD#*nev{SQ zED4Lmk4>yuJzvjE%dM4TItlu}mj_rY{H#Ne@U?V$z88~HyP#p8Y2$wW3ujM-w1-tk z>36CEHg~JpW2xvf+03U?-(JZUqc&E4>SMiIr(J8~R~WOL9=E6U2zh!;=1%J3FwXy6 z$0QLWmRW@pyO~8f+|>FzkkCxsUX|TqnH8LC%dfZcAT$`bzARtEjQbhos2xVA%-&J!jV;Ta(jX~`gsL9gc<~6^|tTx#1=)Z7eP)12Scj)B9XBe_qb?lq{&71+bNWI_S_b{z7 zgQvy{=g4E>9!HH8mTeeHeX7B-tb)(lasYfxvG>V*TumtXFNiZ?lhiU7eY?J1v|3JP zJc%k3&)f?#@w0a^a#U;B&#ac6otfzNX*`YQ-}3u@_emE{$SVx0Wmt>V+T2`<;G&449E;MHQccZ1e}Y2J?J`EMx%XS$ob7#I zs>%f^;o{~cM?xlG8a8N3pq^N%ut5nYTi|G=q+=3bB!RV$NAHM|o|=`6jE}CgxqO+d zLzn6T2x|L$>eXAgivAOiC1b=hg<6X4O-rm6utf%uq)pVlrgA2WpUtej>k)1g$)S3= zlUILNSy+55&Aa9IxGB`C62YBFuO9jFovISNVO`6+d(Q{#(V`u(aBE+_p5DCQG1c2-xs={5{qrI4Z9L+%ONZL_cr&V`uywNH-!RqRox+ zQk|>*&9s#Nq%}Lc^bh!;;euVe4lVk&L1432aAjw2vqJf}TmRfb$PIAsQK+r2vqbrv zp$jLjFKE~0*lE_-X>A1L0)h>Hp_0v9Wg!qAr%&6=rDVQl`zdvp3! zX|gmg-hPy-0E_1%$3y$?uw0(|86>D9&b;rR0a)n3fPx@ZvI-7GDI`i#G{r!e%}q=j zn-007Kft8%XYwD8JD@-Vu6jSmf-iAEK!n);Qt|)ozC#2OWbLDD2L}Q=8h!I^r=4bm z18hxYS5>jfS!aoV%rU|#p~@|n_>^9CF~X&rD%qKBv(GL}ITd28KVbn(wO?~oa+tD%aenGz_>J+;_wzkO%_&`Bj7d-~yy8^ldG;EucMMY3IW zrRg-#$}F>vJEmx=sHru+jvo=#3H>bX)m>qO1=h4Jv-n{f}S!VBnZB(_b_COv?}W>NmyPgUCc0gp=}v#Py+dn0rCrKi_{}+bOxz zt21ZKdiCQERZ9Nygx}}w+O==mpht_cF4$a92j zrOK18qJ-qR@+8$7p<5=*&=A3!Hg4_PQre@Wyrs(*1%qHz=6v{wb8-9`#mJ@0cI_I~ zsf-rk!$P0GJ$TLL6e+owOQ3VNufeS%}1YB}S z1J$;o2aNU&fIJ^D67ch|usF~2z0KtE_@@xt%Isasr-Foxq z%fkX~qBu$2xOHa^zSFK+E z(TDHewd3<=A$m#Rh3df*T@wN3vN96!(*k_d^zYv}saYJVA2yVOc(!UU3ch>x>IYq= zoq*_k()sh^i;E?cj~o?A$1-qDQOQ~qS+{RT_GMTRul;Q!=HiN&8JW{VU|}z5-oGmk zXeKr7@N+*iYc>KGXvva?32C#{!K6*^;he63N?SoJgl`O)saYzH1l}JBruihwo<2!h zqF})9+ei~0K*5l?ed~tA<(SU7da;6rLuR7+6vB=lCrw|+pFN|EAVK!HAp(i4o&y6T ze+nyoL}aHY9H(wUg=hCNuHLDt{Yk()zjs~xN^8FP)y*4}@f^MZD(b{5&D_{nn?VwH0k|p@7UuU8z!)69f(v z6jVk=MnXa&XOzWg;@>}JYAV_ZXw($%&l{7?{r*{NPmivF!B4U0&-oAK?Hxu)Atv-1 z{YT_QU41>;+4gq!8M_GT!}~ktC}q{tle1X$_1W23BDQ)E!~yIAFseOu@JtLpV=l9% zjt;1Afd=D3e!GigzA1#D04Jv)m?uJ9ZfNHX_QrrDrmdwV6A*o? zjba|65|9<4>KYyv*5=O62q7#iteYPJ0m1O_a0?h$6K-Jv^l%F6dlhi2iCL)yCXc1^ zX^7u)m8{FyxFlQY;MU*j?&pw`4#9{XYNg)(ehoBIH+Of9r-=2n^>uKeP*?_RFF4-ataFBqM_yACV6$Z*$$+y$Jhh}<&}0m@(2$>^$9CGJGgOAL>Niwv9YnL zl_=WiZSC#J1G2;}$hJg@iEOx5oxQz$D-61Fa&kqvYPv(rtgI&cw16OIXJ=5L^73+Z ze;=RcD9Hmw#YAg6r-Z?btP|X~WMm{Djx3zvbILp?k^ap{^^xC?kB|5FNEGz+^y>T! zptQEo>K~%iN9mr1w6Sx4{&*W0>@P2)L@^|uA*kXYvP*fjotm4Q517To>5o;8uB@QK z{*K}?rX)lL`^bxqfszTt5`|Db*rAt$`yFVT5a|gC2`NXjSR}{WK?QOO?51TM+q zO@9P(P7$<*nW=^3@!MGr^lh>My1uSXbaMONh91FdNGlEsstALoA#op05uvRd$Ud7G z76zU_7$$1e5Zq2Lk6BQr#Nz{MYz>4rNzlp4%8D{%ODQ-)pEx7}PLO}#`So=P?f2!~ zU3<~>{M;P!`^?4a-@knVBT(xjBOyP?PGHDS75t)D1Ey)Pxf2t`QiREzjihwB%qezu zkE0@Bht7kL0u!u2KTx#pDPi;`PEO3LCZzY#NgG+}m#&C0;m#}(se>^lRk|r1db+w9 zvy5>Q9UZZ8aWI4&a+Hcf(KrE2NfFXT3shkBUEST5&P1$V742I()fZ;G(R@=2_3{>l!x{pP=dqqfpP05EZ31r%|lfVTug` zmn+va4UcPlk<9#p45Brh-ditJNo1iy154yI zX51n4ndS0_1Wh*sliE@m7EV*^ZjGv3auqNBW!EN_+zY*hm%0timr!G zv?+8;4NUPgzk%2xJlh3yr{+a$mazEJ+C#JiQO>sX5bt3j9%c14&f> z)Vdg`vT#bob|=WA1INn36iZH8ibb)<#=Y0qwt5S?*mZ}3x!PJf)=Q}|lZJ--IsFle z!+?gFd3IJ&S6Xv8YE&PP(@y=U_^%h~Pf@{^MX)ww!HN({V=|gUHZw&Mf!Q>{2b%Iv z2ps6BFJ!m4ZS(^?Ta>@E1Ob)UN`MVbnIxj9hqz8SByPrqz62UrXl-LCxUqu87Ow+R zV{#^aHxSTaT2f~H+PbDjLY7@mxab!%0vk>-O z3eiQNP^oH88j08RgTjy-dk?wm@0KX?fIDp%06Q~}rKgRB1!Me%aC9P!ihmg$i$0I! zR}NQT>4QOZ?g{cZyDCX%UWJzWV3I{SgxooeR)ZQE0oly^bFs8+nFXe~RA1%w_6XP> z@8qQ!Xr5vMr%d%jr8IvOi;eZQVH2i!2^(%vcy39+X4O0px;8icIr~awfFLUDixj%? zF~O3BgNBAiiPFg5pB~idcqG3g|H3MuXC4@lTIrjOjSLC|wdVkB?Se)bXW|qA0<(3U zf0v%#4Y>fG&@m?C@DzCKT%ur4Z7sakv1a|(6D^8lWYn}xlKw}e6Hx%Hqq6PkCD`~ ze{nJGeRi+6qyiaC2~%H4K{SWULSp$J?0r z1_@vh1gq&tJ+wJDS_v9L8~I$kd`v^9K^;xxZ5N=j^OIW8Z(r6q$=9DJi`s1iTQyP( z&SF1~wW!M32M^M(uKLZa;Z{d2sQ56wLfzow51%!<+(ap;%Z@ly(e?`x`H-0Yga<{( znn1V9&3OE;!@)W+$L7d=CtAqHs1*S$c?T}_ZlJ9hOD-aKqJV6RK&9C-O7ZCn8_Vv05YGk?VLhLVm#qs{YFBf1>UVH0o9=|%!ZFf zvPF<1K>O_*&oRg6nm%QJpcy#?mr9}ZVG6}Z;6j3aB34gs`mAy)C$Jt~s1aby?EM0H z#+xQ&{;4bz>{=HrE$ox^Y2sSTnwpJ8RRkvbMAO2*KE{m|CJ{L`5ePcipzns{4tv>N zeUPQ-*ODk)R#!n9Ggl#?(U_~{XLX&%1@KV{Un7s_|DBQ0I>FUI0Zle_y_wT%EFi7F z^EOiDo6MG$6B*=-9#~WquA3nl@JJJ`EnFCOhW45_CxSnj%&S0NjyRPs$1Ly$)6vFn z44n)##2su$i;FnRmXL!Y#y`K~@}$aTW^UAYxY!MDqkEGl#st z4bNj|mZ3srTpjrY!J_ruQekYvMKlgODi*>aaO%^S%El!|Q0hz-cRWND)O8{L`BW@r zlrqe4KclV?d|c&FKi4qbM!xEO?9OFQl^yLn$4TJ^$v&Z<#`c`&m?)uR7hW!zs4ISd zaE+9W3Dlfmu^a3ow0~TUqlF~PL`r#H3Cl9H+yy9m6q=%iT`rZ{m1$M`EN=5Rr%Wh2 zr7C36!Zg{PU*s<{kWq&(3nh4)M$%$n89SP^&2D0(RN$_WsUerT6uYMACQfP<2jC#> z0ZsfM%~%@CfYef|b={$XSpDH_!8$Ore$?Q!dFSIEBCRC8zZtdB*3~7Rh{##ghkG5$ zDFtrq5@lOZ^)3I^cEFsI_E}w<|Ed{ODLsoOug`dX1hBCsFd5KexXG7pWYCa}$<~f1XK9TQrbR%)ghh!} zSlIKikaB_jGPEgTK9R59aXY5;Z0SM1a!nOpRdfw~Z^s*qX3QD&&bY+@@?$>b#QMi^RhRbFpGUlyM; ztEqrkPnA<cQq9Hs~j zEE#DDv}H2bh*PC+a&K~yt$?b^`4EOF$3v@0xKShI?270VTVW&NjReIFMzA46h=baw zAo&m%bP9c7ZWjtItwGNI#k~M2F1tD&+N_MMA@Hac>MliXl9v=37dM|&9Hw+4jPgLr z_gz{$d6{gLMc@z}Gfc@w2(l;kuSzq&B$cN4dk+80t6?yRzIX_0MQ3F+jEyRG-WqZ# z5(Y$RaBx8L|zPkSAF1lG)g;VigcTmY<#Sus`6%s zH(M$85;CZ{8Ymd{wh-CPN>tb%8Fp}S(qZ6AOr}X;ykO>370TN!jH@-QRH0GKrn#A@ z(rH+tBiUFdKG|QDQRkFG?%Z`OW0M(jTBX&}*rw1Roa*9*&HTOuh7eAliENut?Vyz6 z65f0XBRUfHHC&c)W;W7ABJBYojz|`)t|x-Lnu}jZV?_>|k+&-|55SNsicMOFk%@7W zeiv|J%xV;M^I^JPp<&38;J@Kp9^&=7*#$8JKqw<_1XvKu!#r-Ov1wmhe^&P|HXret zc?jcod&Qc=M2woSiw3^t!xhn%SQ;sYX!rMiwXc+5lrp#`5hN?I*Gy=$G&?mYci`3? z+cd0@3rsuihyTd8Dy)0Iiu9NJqisA95SD%TiavLyqfPQsFO5dICF3#3Zr!}J zniwqPZ@}GrO!@^&l`it$^EMh;&9KaDPyg2?mO=iM)|LLx8y%>WSeFuV*Kx%B-o|kp z>xUNhpjIH(a2E&`Y>XDKkEGF%oUdANCwM;eBgM?$?x;#|oR)2-2tKKybdCW-C3byw zY(1bRUI9EtWeaB!Hhgdrlgeo!xQ>J0cp}}g;Rfr%Vb22fzjgW&`tgw{tHZFoHG&@? z_PHW1>lX=|hZ$mM9_Y58GEFCcBRC*!?}3w75kmfba}rd_G`?pukOfvnv^xpaK<$Oa z8?s%OYZ?et3EeXjFj0Q(ADuv8c{Af{L$@^k%0~Z_Ukcd403+Y9EI=g!5s?ZV!Tf8& zrkeN8Ll4;3YSY>Degs1~7Wi=mYTEDsY@wWw=E=rbbzzx903z&a3j&KF=&h9b_}l?n z$OWTeOZ&QY@r#PW5MKJS7O^!i3-wfo_Jo-am@d{!os2S4!iFGVpF7uneA)#UvW-~O zM+vnTn%P3 zS(`acu?c@#B4foVF|n8FEZcSX80v|~uuRWDW$iB%J#uv0CeRlb=>pu5k@!K{&N>=+MkI$_J1>4^cqy5`!h-W#7~ zOJX6{Auce$XnxxQZ%Pxak1ueCiRMal->}zPdX_YpB;+6vX@$;Mc#3k+^~Zw)fmd&g zzv#DjQg&liU5c8r2cp1&tQ#YyzL{J0tZ2rL0zZN9uKoOB`dPtCKXm;xX(i@Mt1?L;V>El9oCUV#x%tK84dhP z`drsc;u#akmrB}}ulQO^Y{d#efRgE$3@jB|*kC>&giaY(+Yot!K3$Z>5|s-qHWPs_ zDw(Nde#Y(t;MSbu5oPD0hLa$R`g-dw1Ys=Oym@F(0?yvh%FOwksDm>t#vaD~3oo*{ zmo`Aomgq>@8E(fW3mdR-kitE2*<2ckFvbLH;}Ws@XhnDEc<_OIu+9%5o9yKGXe4;r zJrRHGA_S{XSR%DK>%3I=OBmW5EaNoB9_xwJ%@quT(tF|#Ew4yV_Udm?B;+TYJYNyq zt_ivN(EGQiBBb5ncm~Y5>A=RjR#0_LL-tT6!2iDF}wcys4xkr(%r zV$?l?2{+Jh(prQrH9@VUPN-xux^`}q8Dv+xc!q=?VXZu3ib_%Jqx+iDE@Q}~ZBC}r z8aW8)o{UC1IJ-?G$8cQ|#@Lb=pwlua8)mI;}+NI zk!+A|P)gHHEvsl*EXYt@g|6@e1yzAg_1q7!k2LF^fx<4P${W~G@c2brQm$hvKTQ6bl^-Y6lYu!9%)gYu9=Qd+vGr*)- zi^eZ72qy9?Dy^a6zp2VYPJFddjm*2h{aVTCC5GqOxeIJ(6f&(VL zrvZg3dOHlR8%RGhpSu$#r#~Y2=cm*{n&=wvQ2XJOzDVvbyh9HY`VE`|Q66v@5FYi3 z&yBer3u3Oyj3{cAdl%ITW?)BP%fi!Q*U_!uM8U!pTRBMpl?L>+*rphq8k{#M)X&Ru z1v8PuY&B;UCvm)xrucPL3_7CXC$q#~k_X06m?F3A6dN03y79~c5jJ=1#>vR&fmdRY z$~NL`Q{Ki}brqAi6f;@2mA0(Tj3E)VNffXuaq&?>@KWbLf_Ui(xW71*r5Gza(CyG5 zKY+Ht@YtE*vx#Ql-lbLmoAPp}rZlZ#yD?PJgtJr13a3X&hK7QuxE@3!ps)@EqqW~N z)7G3QsO~Lr=dkA${e+F1L&t`oM6Mt5VZnnbnO0!I8R=_fD8Iy;#~R9oQt18|-xd@H zs9I-$Xaoay#ta;frwxdz$B~qll1;t83x*`TtI{eu5N;x|Q<7i5aRFvQ%A1p@%TS97 z3z*};o1J4DB(@Iz)dIZ47fuTyphFS(*fB|#DboMCcoJny&Zm*1#ynpCS*vTNNin>uIlei{}s4N$D;CH^wNM4X&TuL z-lm0_iAT#QyfR^?3S41{hI*`Tq|dG)?%Kw6UsSsINg?^wVkZ<5vYE)9EQ)#1k-#wI zQR*qAOhj!`t(I&tS8*qtxc2j7r=0YKDSzBbCdwUc zo`R7h=`LPCQfjj+8prP#I>yRnopGPgPuUmRSS0cA@`u_J6IinTR~qA5eh|}~6Vs#; zvQ~h9qdNm--7q6+7zf{ZbW^rRpA&SW77}3w_6d~&$VPp5}=CXu%^3#;HV9!SDrL>JMWy#`FAqyF=!`aYb zO5yU{xbW(b0C)sP>%C$j3K4Ud=Y1{D(@7~-Xw6ujixHlNKxr-zg%G*3VPsL-AxOVC z@p5rOdB%`sjU}<~mIgb%YCwHG^siH-VWUhIJ0ah|o+rhe-u`+rJ*~~io$V5`N_kS6 zm<~g@wj==XOpdG}2du;$+`-xqQgdhoMkP1OA%I6WO}h>$+bx(uQURW7@i-AUV!A9T z_b}C%^E~aC-8=-c6>#e>&S|aRqJ=<4`R1Xq3<+utKF+~ORF-3o_dUD_9V_)Cz%|Z6 zvLbLu1Mk>+&@wUmaJi!-1IL4zbz>lTNawt?3XX1HB-ShaA}O5Mniu)kIb{ZxxKQsT z4v$I9+3K`N@kTtuQ14knB4taBqU2@f--M}xR~k=Jm(P9m2(%&;M*2}^No9~me1hAu zs7-y+jxG_s_h+7t*#<|zp6Kt4V7IA?DxkSmljocw=zVI&aX4efv~f+B4nn*S)$-?1 z@NSx9;Pcy3MKeIXlW?LHc^N?dL^yH5}e@OV5J=!Rz3zx6;X~A@ z5k$nzQ_z)+rs)VV2j?BD?pZ?w5v&}f5ZqdTc#vc(QCb^vSx}?ywXBEtNMxt2SyGo%~#>`Qx&w;@fn|)w7NJ7}>-Xr$#l# zcQduBupBH~em|1R$svv!UyrStt+-INfKn8$cKs*xmD+JijTJ z=D6R5Y`&=c#!5jq#TBNsin2JGJ15s>+K04Oxx{gtf86*8*Xq$X4KHD=sp=!a6vGxq zXj+}w{UPs{FhHSKXz`fNqY6&8TSbSDrat{d3y~=b>#(Ayew4T|ssU;?)p;Swz%`5% zC}7-_v?g-$0eBS$@;IqHJ9`xOHZoLXOyda*WYAYw_T;zY?~wv?6(Uw)dsG)?$>c=u zsvgf7eK5|3WbGfMGG9L-a+z{;(1|(^Po*o6ku!AlOoS(sl^$7NKJSyRkG9aI_zn8NBdG5u8spA230ahR0ycn7xGrrRNDaY$CbKc)+t&M|YF> zTRe`}bK*b~-%J>{Oz@tJvG0+apCUx2iGsJKK}Lj%tybk3wf}6tA z!#^JgZ2&rs3i0Jy7Wbeq=^vAL^UQ7|piNGSCXd(FLil&_Va0Y-#oWq)6}|P>T^t$0 zzh(waRUk^CW&V)zv8>Y`Ql(3|+k~JWkPuYO2du*B{w=VBPwC-VB8>UMM0Eo$A<+yO z=rfK`VBOH_fM#^tmNKiLFE6;YmQsOJLEI{!*=c%agpS=~=dP3eE9a<-W%O%8yh*{= zs(A2@^5{o5X8DmrLbhI)cY;#60;#SBpk==(zBg-1*q)|af}5{=Q3hGLK+>(yr}=)Y zptQXBl%`d3?}Jny#ht-NN4KL>AcCNJM7WSbHI-3vNxpm)7ZDA{o~*;i!XZD!TRT|g z;wgwA=?#4Vm{pFf(`?m%{sI@uK$ zT_b#)RNV-Wi*t4$3>V&zjiUt~9Y)S4d$%&iW`yPe<_>8?mPjF%%zk|ps423TbPhCj zNAUdCWJY5P6v4yJK4uL-YliIWg`sMLVim9)bAc!INz*}1TiNdgm?!BX&TqWl=t3ls zIY=d$N;-uuG@B2jZX=?5Nbd5`o|f^&(&*D&tPDKTQmoPlvtvlnF*@upx`YR@8tx^5 zo^-H|{;i|JLj9H;L3|a@$Q8~S6=B{gaYR9I;ZPw%*z~j|J+@fEqP8d2nM?ApG?Yq< z=?E_ZvuDA9l$4_kkVLHs)f{0V3qpd7!GXsv#K0>Gc`m~6+<_Ks_24{Ue{k;mgAA=Y zQxWZY9SY%V8mvFVpyroWiqgW8N3fKn2$7nIeKtWQ`ip>`_a1S`W!m68{ zi-Ml5c~6vg5(i&|#(^gV3QiP-`la5a^G0X?j7?#hYv*k*4^xDt{%7h2-QbNZJ*W-3 zVm<_AP_|(_mU8fQleswi^<|jIFomm`Q&Jd|9MyJrX{cTc3m``3P(>dC#_yIW`8btT z0V?e*O^K>HEq~Fa=0^r;W3!@Qa^= zrr}%MBaytN8J{+Bxk9v?rFh=?8Q;^xWP%%I#N6}WM_9P4Vs@7NQNqHo5+~f zO=yq;=XZ<&7q=^4V#`pKrs$va@7SSyy7`x-VDvqwwd7+~JqRZyHIG-??O%GHJ69n5 z>E6fAG+vV>NKK&>YojPx+*8N#+pS;HxSo&kLOa~-D_;d^%$t?pqMKcnJgpRvbFA+f z?4b^NpLbA+iM+gPy;r}G@bKR=FF{Dy;hU(SmQpNt*wj{c9B=nYN`fi+_P$eNe%noK z42kiy`CQRzb|>g)Di%Zyqqy-;ZchAo_Nz4EQ<0ssmD1?j#iY)GF{}t9z@fkPX+)f6 zw=8$Gp=k6RVMj`QRKVN1#SzgMK3UgyGugOGar`Dq7o-t*Z?}*O1g9V3@3!Lm%fdkX z685Kv1l^>)U{-qE-q+MRn>~Nw9Va=C%4p}-%4pt1EXP3r3;oOjS$$AVzhL?Mub0w# zocSaMN~>?Ra>d(6POW-dtQz|Qr7%bU$e@K1s77{P`(6jBXp=a+E?V-ll+H2PqnnQ_ zO4t<2{`b8>PS$sLM_Vndng!0@?#9Yo6#ccKE@&SmsrW#yQ3viN3(xUdfKv{X4nNepp~hd8uBa z905simwB{+bV%123~3~u`@cHtkEo`WdZZZN!mirmGJb~ExoToqA}>&-;S1`zU6-th z{#?TAr>cJZ58~Jk_Ctqt`Q5=t@9VePvA51p_=h>+4TW>u2tm`ca=OYEs>VML)1fCM zX%(0%;_+r+DA#(ZQo&%C%arn|gz@@*lcdPUyxArRQEh%O!{L3>v|ek7mFhTaa%~G5 zAA#isl)Z;zO`6@IFX(Mdhr`jU2@b~jrqCqVLmGs@)ahs>v?G<%a;v6X`HA>bt(n<` zLhn!_YGMSwrupn{Wka=TI@%s{Dlv0n+rA=vJ!|l&}Q@O z5!=jGM-{uh&r?aZF!k82_7~adq;{VP&YOjHX2TcOWxbJEa%ThX3L3egNXE9-btz$x zyW5z%i67DnTv3L1=iNY>8rc`N{o+;MJ2x$B@pzYcu4RYe3>X_+`{;u3RvkyY8*x_I zg-^6hGURf6cwz%7c7fNDk$E??92K~76gm8hnH-o|d>bYveWg{I{a$X%z-Zf3i^1$m zuw@N%q}MANfxrfTkx9mXGok=4!Xrq@#0P6?lQ21=4jr~XNPEtAI<%YeHy#T8d8i2; z*FGFW699+UByROCWmUgYlp&jm`CM*;%nQj^xUmC;;|&ScQ%lKEeu9$II>g~hi^mtC z;Lo=x|Bc7D>0ZB{fND*Gup%0XeQnEL$_n&C&t;ukmXnhqa7w}S93B(@@*&$;=&lGL zK~&#EhmQ-*(Eqg%-bw1CH>7rkF)C)xQOb-^8=VrT=M;yKV?rnynmmZSEmUqvRyGho zSw#lxvE>b;*ls``D69J`6N07-UWOJU6ilp5$KraT9~ObfYlFzk+`fs#E%!V_8Lh%M zm1Y6XV+T@ODOQt|Lmu@VNdkKSBAouvc!c6u%cy788k7ZEg>rmWlhIDMC;>h>$v+bf z%dS6mn6fHCUWIXt4IJXBM7m9VKr$bDI4tn_;!sU-yHMP}6oXM$6;wEY7sdb;((?Og z(c$<2#Gdb0PE=(Q8e!PiMWV@qpd$X_QoBuN6Q)O);B;4OSAk<{8k5eb9Ona6tGX(p zwBx0au@Qe7j1ytNR-r8|Zs{>9?ZA0#FA{lEDFaZxT;ebV>mL1kfY<=BaYqU0Qn^xj zH)i3z3X|QLM};~LMIxTC6K|%Ghq|)Jc^!2kH{G02L)UbKZW5?k923{&8CBs*#M~ie zOcA7_GwV2$(0HBao-I=#7Z>8OOI)(%+)R@W5IDp53U^}&1OgtXXo?TtozF;u$oO0u zm-|fagTazR4+~>wo`hz~lcp}02VOY>S{#Tm83JYiR25(M3(;*xG6J5BaWeKV-TWME zD`=Q?I8YO*j2ku>Xr6geIK!x~7X?u-^{S~&&%F>Vp2LexYH!=Z#0Xpl5_2+-4l()s zf7=se=m2d29e|igaTJI9PBL)0`eRK8_WGR*J9M+AJkkl23Vn33`!B`6Vi_f-P7{%; ziWut%lMcBa8f{ZXaxVcLdVh1fvcK>ye%lc)Cn|Cn2UuqIZ(T{h9vJMwNKa;VxCk5D zoqyuJKOkJXtkioE4fI!)0wodgg8%5UlLmnO?0G@xCjMsdx#Kh=^C$+3;UdvTo{bMGiD~Jm65RVC~cFD(i=Xzz>c(1Bb=)pJa7$`W75l;aO963gYWcg?mP1 zMCcd(SFXJ*&G(MbA#qCowX`~J@N?!pgiR!CbD(OuhWIzlvVJ! zD)w9V#|p|Yf2{olPCs$eEHoxkAGjY+Yo1_?%9(#y;26HN8u(CrgT z9OZ-MJ_F}77tqNit~qI_hQq01;cTN`V0`%o2oxDXmKk$a;wpZm9eC*1O+9LX$qjf^ zx{8S+sdnoOI3A!~pJ5R$@3IR5hSXpYZPILDL^=7}wj*6~1|LgLJJ`5|HRUYH4v>Ok z458wXJ?~%*QKeV7XQT&i(nKbaO%la7VSzCBOO-xgSh#Q&3c}POtaXwA@1l;pXnM!8 zB_XyVCI(4lLShS#P)V^zu_k7t_ePq@kt2`wNWN6&}n)?ZQ5<%)8zm&xXT-( z(Inv{iY%KTAUmEJ!eS{0LhNB=scR}NhZ`R$#^K1>ydtr6ba)$3>==c5Slm;xp z9Q*qufQC{MLBJ4fVAVG1wN`z*Hi=F$0NcT&Xa@?Q>7#W*d{a~5d5{w(gUQ0n4Ef)#v|G1f8_(CS--9Q~>F-#Qw)T!Du{hw5Hqb7T6cGzbl zR6;8(@%9r522v9~G{|~UQeMvnWpeJ!1TKNOw?0n(;u-r1wR}Z^MHNIe{16Q+^mwXM z+f2Vwz^-iR2rguwhwT`UW(jcF_;_p1#;Fqntr`>8=gVo?9$bjiC{M>O^d$Gi=H#b} zP&`EuNB|<%hAMLW!I7yVnf$vJ3k#YEalIHQ65@fbXRFcYDWJJ!cA}%5b zT^OdL+Le>^L#qh|WdhNd??SUgz~B*@&i>xK5d~f+6YCo`K6UW5z1s95 z*U}oln^yuv=Yce6(r;8&x1&wg+r4(-VqEz)y5r`zU$NG#xr5GqCtsnS>ev|5 zk@kZSQ%QVp*)WxD=EBA9IX*jXd6l5#^ksfpJRxL%N;T^2pDIbGmpxYNOJWt^0Lnu5 zp8fVD2W%3Z$O6?Rn%b&ff8nEfU3F-vt*qb?7#9or9~z_~0ukn97L~*_ZHzaVbEHXe`(xCYdU8Y_3eu=jBl<876oOKi}hOVoadBHEy%|`zCJ{@)NS#&a5i--bE z5A?GdUiXKjVy5xcvo`WIq$Li_p%+vTG*zdo8<&JyW4{UeW}p?}Xzj}4)-M~tHc0sKrdgt%_wC#~V3^6i*2qtg{3DCi|} zFO?6~~r5nB{k(d@y>2ES$6 z7V9G%-p0SJzn5C2Ff|4yEo6haE4LWeI{x@2Sa18#u%8bG(ftf(xty<(a}L((E~|7L zq(gxzx{AfOP`x5)XHQ#jp*Kl0WpEscw~dCK30FrNvb{;ooY8H+B8+yl1gAgRSQ6-3 zZd&_gsSU+0&1N+24C#d41#%%CSaG(b77}AVVE+-NP>hl-q^7ahZy6Mnj~fe z#{9FI?R}-(`mv(etLH*8pt+fE6%O;JRJCgR>D*`pdu4{dq)h#6D^PExJY*Qqv^2T* z&~~v1(zVxD_3=TQWu+ujcAX2BJ4@~~-{hlM;N7S5U~yONz3WjUFMP73Op~03(bC9z zEM&0Q>wbrH@vVD846tWzY@AOR!L+A;2?ok*$ZLbWVm;k|ZJLR_|Rg zJXU`3B#j|8T_9I3lbERHs8JJ3i=8ZvZ*nC<^W00eRJqY&fZffo*RpA;k{Zfm+dlGz zTagQ8+QpnUiP-sys5V!U6opQJY+Mf*ErK@$iboEN)frq@p9n*A3WgwdTK>bh86!_C z>|rT^tp=YO1A5%sfeh1$hE!EnD!TWG0pcP&#LDlTSDk*aD@IUA=?XzK0&@BD0-pLYBndvdH{sSoVwBjFtil^K?>K z%>}kYplEa^bO0H1P%~YeYE=Q_!gT*1Rh)HD9L@9af#9wI4tEZh!ySUVLpTV8!zH+f z5V+tF^so?uyN2Y!ox|M{+}+*zUB3Uk^={Q{)lN;#%y##5&u&eBl3x{MfINvh4nHzC z07U4K!=6>cBf-np1HlFOO8j}!Pd!EC!?L}vz1GWrDBd3P3jMtAeYy7giBD{O2p4#| z;^kD3l@W^vlG@t*u<3-oVqhmPG{Y2v{rIjIq;6zLAxyb?CLkMNMKn*<+puc)*J#30 z!5&F4JfDcbNdM;JS-IP>VmeHJLx;xF72{TB#_c&gh7K3<>7iE<@%4MS#P7;1LiokX zatu=3mV*M+`N0JAZkRiZxciL4kP-SL(JEICJ;sP2i|cjcmC0e*+-m2Q4YnXOA=4dM z5I+(B^IuZTkq;r1HzH_~NPHwYL}FWAXg(;`Y=-Zc^nAXd=LA2CJ1DO|)h^vJL_e%- zuSRf@@?;n4bakgjOVNAPf7y(VE7PtO*})6Kp{vHjV9V!z1kUjUDd)}wbyiCqgFg$N zUc6AcybwRAtIN6dd z!yQ)neuX=ve=l;CJE3HfK;?H^U{f0tfib?dkaB*IrgIp0y)h9Tn&79FAAAKP(mQ_S zBLdIFqQE8ghjaYw=V~R&I&{a2W*?dJH2kPU!JabA9Fb^jNN6ZgSH>Zols3D$y|;SD zn0#SrUj&R+s@Y`+>!v>pY73Yxp&0WW z*6Lh%1$lqwrm&fpIz>qRXr^1xeqnS`EbE-NJO_Uc2sbHTPS*~`Ula7|Lp0pMWRBL| zPqr1N*)%C(t{d-E>0kY8hqoenrlkfogst(}^fn^Y1@p)7V3N(`6_toOL3g zv8*KBO-JX^lIIUb(%07%q`$e0R+c(h4=Ar|8k@xvOx`tb)a8|b$=YFsHIEbw9=h9M zz-+POyS=_^5XPdD!zWI*?2@_2 zTdeu++(ge{ZPi_e(tsYiGBj?0o)NsBeCIGuy5Eo7kyC2pF(~VX@iA7HDzo8}Cu)SG zyfX@+knn!VQ2i@YWdF;bN|o_E>(Lhtwp$4liT(`X*m(~>(zc32CDd@44nA}IqL3I# z$HYr=yT)*LIhZe?dN3Gz0O{9Mf(lZ5=k#=yO(d;ux4e>u>s%K_Oxl8bir*AkIG~FQ z(b%k-!~uMBXNE z`Erwh9{pHwNDmW=P)&&9H@pkWH`q=c>IzGwGV}2V3pO+S+^Z1IXVrLTo9cr6fZ0)y zGbAx<9Q%G;F|_5{RH1S6+$DSIb58EHrIZ|sTOP(lgt`$(T$Jc64;pmw91=C zfw4!ULsXsIV1-<^kDjDt8FkLDnIQlW6I9uRsPVJz@Hta#R049wJ16^^5u+2zKVB_IQd8)pa*oqTwMyS%u*oKs%Pi-IK@NBaFY|#iZPz`cCd2?PU=8B-%x(S`8%A#DSEIk^NCqzM7>cf0C zpCXsjL=|hHkM5ieQ)=5byYAt8Xm;2kR#$u{e4i%d#kDttYh%NtcyIG(OrG zVEM>w77mi&SHa`AZpjlj2Go=kWSIHVaT)Kq7zhKV-`iOZj=NAa*v0iTso3G7a>L?K zUTd0RoZ7a4NFreC+KT$RO%!!xD07{^m8PL|;kKPA^mKN#mOm$PzrDRIv2n7^MkFmQ ze%9lddi4^FPoY9J5F=3}TRai5*t}a{Ow7G@IL46hr_& z-O=Wr%DRWnRmfPQ78ueWiON;^3hXjU|M;Jf$3+|ZqpUn1Jj{ekT76c;ceQ0x(`!LM!Ur*&{2x)0Cc zM|e9g%Lp>|s+5~5&Q2AL_Jd@daCw;NbBUy(JYXwp9JjdiMJL zm2Qxz(WE-Ioh_hhAEU#(k8K?_!K7|RQ4v(g^&cNCop5x zb#GhEq`zbSF&*V~fHIn#RO*pWZm29)gab9;x2jXggo(wHHvrxvnty>lsx3JU7D1+Y z{Oz1kDK#~4F^+bUEO&yJJSS5C2vpP zpJY>Wveu$YvC~EOJnWPynKAJ*GA;SICf{C>h~2Ge^l^DjDjvzO z{j%Nb_By`-bgax(j{CdqSeCVSCwszKF z0LC95g0elLzKx3u!L?2Z;g+;wVp+BJMzw!Hz@$8C<#f5U%CSNZnR+71rxol!vx%9{ z+1R|iyk4%EhcnSNzxH?K+5yvwL$>>2*U}NF>E25N?SldQklxRzOZNkHUb)q?=)c>|IFUDo5P*1Cx$ES_lms)U4HjKW6y!G4!+vvS&*iVZTD%sgrB&+N}|#2|dET zKpeZS3eEW@8}8Vw2kVkKTtZg1aiW5sVeoe2QoO>FOHqkVN%8wyKyPRWG(;s%kXA&| z2|*%7V!*@g z(Bd~T6Y!>X-i<~cv%MA+zWRw=tEtWXOq*DH*7ZpNlVOrV9+LqQu`i>B$pAfVCq_I$ zRjd&=LWf6lECy&o;tL_7u8JQ@C?DyB%U~h~DgKHl0V6S#@Ro^kM01j-R)_>W??Wx~ zlV@CKbKbVNuB@>|<#}rf^P6fxE^2a-GUv-kgwRZ7nSd z{eym&kzZeCc;4aHK?yzPD7waUohyWolL+@-2gAmcc_K^*8Y%M(%1lOVi59I6ntHc{ z`_;*7E0^C}m2VchMkQAmtr;5{RUZze5Xu+uqk=6gqOYn$;p|ZR;fxH*fyAv3a(b!t z$p{A57@_rn-Iv1t%_QA@?b>0zA{OtG>LjHuAoCk2rtW34;e)=uJ|ffi#XAm{0d0n` z0Gx1YQ8?hMZ=!2Zc z5`T@#G;-B3BSGPW&*BRm9S(2ZW&Uevk(89w=!UT344m6BHDMC>wqD)b#E={A6j*fu z&GGJ`$(&b&*h>Aa#(`l3zA90Q7C*ZR@vMeepb4Rlm@+q>h*Wfxd#ttnea8BUhPwUZgONPu ziEkVO>VboWg#{>nAIx1{evMWbsCIT;x3Y3fhzZclzjFwMSC5~~M~ znp;2lr1QRO+vOIBT2uP@@dbZCM8ouI8%nr*08qdj8ynj%dDkAyU5!ZMH>-sY6Acx? zpDEtR+s~f%eWj~3`cYoanQFLPKOGKjrrdhN-Rbb*aUym<%G})i-xM5h8A`;POzY3H zz)OpZ4WtE;UK4MTS_P*IgVl>?sZfSHemR$%1>w~quy)_|9IXf9-BsZer1?}M`^ysw zWN#69=~Dk8=JHMlk0CZbUax0k!+MJJd2xPTfT#p;cYA9;m{(n0T^Hcp(ArwqtVHnZ zv0=gh+}hCaXK`_wWT*zlYN>j2eT^_OEp6@WLsM|6v6+bpJ00V{b!`9*yyR_Z9Nb{XzLg=`6*XIflq#o` z&v8AA6Munf$9;At| zyrz-_0ja%LheuGbo}j8$N&;B;(}W}>{=r0+Tl}jnTCpb>?EjYZqK45AG%M}BgJNxa z?u?q(L9i%a&qyo2zW=FpaJts5vA{r|!6E(W`Eep&8AFx3-7%#nUMYOC_A=~j3)efQ z0GEaQ;^LxMD|--nW-|n<4Yi&rGdx_uOnN4pV2@&nH#9V?aCUx#eX3b^9Q!U6Ynv_R z$!fEkz@WgY{e2j5HYhKTzVvK@UCgDSw4DyoBA+CpRd+f**WJ;{$ut$=|3>AleeV0n z-4o)c^Ln$=Skar*4b=5htaGHeJ>SB40Ne#@>6^xM5-Y!E z{kg~lnnyI@;N<*!n3$Awe!++ztzyKV+*wtW1R#z}vbVI#I{WnAq{44+vhcf9pb}Y} zkdTnSzdr(Oc&NjS9}^Q}DkN#y5u#!wT=ylqcL?g~%!ber5{DLqH zg4d*^H9ex7oSgjpiLX@4s%WJGpzLm|jjl`LvrIeN+a95VT~=lAR~Y!0`!g}~pd?!A zQQN;DRoKho9!dK|0Ve(xBV}BY=;mT;pf3V!AjP%Gm{Sv);{u16M53UvvjDY)Ca0zv zUt;L0JbL?QEFZ3q@|WQE3$B0Y2kcY!$v6;r$kLJ$%Vyra+jifG$TG;{FDG)lED|=Y zf*KrtuRgE+X@}L0&kW)%PMfx8X*!$U)~z`D1NepmpIr!OB~=iYrlw0YN(>K0nO?k| ze;38e^H(|dpX+t1j)3JRbr=`fg*lrn~?T(3I2+?%qov8f*(=k?s5270i(`7EJW#qFP@y?8DPLC_Hm zO2Ehh7!l+&PIFa-ws>*flG$=$=m>gc{9>#B1#3==|HbzC*3h@VlP09hf5Vw(M4AKy z1Vq;s5#SjsD+cq@`eGi7mUJW>-QAV;mwJaOKk7QSHTifE5tsR%)(yn+@PDS0U**R5 zgck=d-HRsUG^(~3xw(KPHf(`Xw`lW~;;@rql}g)KHPXkMeNU)FT!Zc}qpBv>x+C<} z!go(g+zoIgO{0@RJ(Qxjmc&)X}m=y{#e|^%qy#NRqTZd!%pE)oO2ve&f8vXy}P$#vAZ{`-&jb23nP-qlmRfg*k zc(#rf7>=b9j?4E~a$d;n5qlk$njoh)B%_l$tO!5m!`pehyWqOd5psIHz?lCOeEor1 z%mbR5kh_(P=$|yEv9Zzl?p?h-kqn<~yt}I|SqyHIwWRnf%Z#_r2=_r>`h~7Ujj=U4 zCgyKcCwBZbf5mMiB;3)(#l^;E>ujS>`@7`8Gaf6v_L!;OEy*yS83v>k_lm^Y&=4fx z2V*ErhIN%bozdk7pTLe~ZQUR#5yh}{zS z`IpNA%=;zL*wVP#qVV^ItWdp4(ggb+g4U|2s7URhl_Bs2u5}FHwP^7>S#CuLiH(Kj z%kK2_^y!b#BoGS=%m3O(>9hntiTg&^51igw?Tlu#X?;uQw?-%b92FJCAU-oQ)5F); zzvgIPiwF#pGthlj39OVCr>v%EY|vZNX22 zW*ulauX}O^E{tuz=_&tqn&at8V?g*rTumBDKQ}>K5?@H;^l6!{p1iz#Up&ppO8Xcg zHm1k|5e1k+aa%XYg7EI03s3$^@#EaRhu`%X*iIziKr3YW^!e& zP@SCE{rd3l8%!2!1o_r~K0PBt6-b$<;F@S6nc|%1sl|%LS8aK*Jwna{{t+0dXiQpq zcXx;Imx0fZ{t1^6%}T1V7tbs?_g4r1@vwp@<6ZneZ-6PR=LIIz$zg|pD z8>t$_=>_cy^O6q@4*I=U0lT06k(2cHw02&M0c9b z6#L{5nk3SicB#)j_i#rHiV%=fc(;;A4ESm)xw+{9O=Pn znVF8_^4Q+(f`L2l5Mf?U8;=1jstBznF|P=z{o4#AZGJ9e oM#L*-RoW6n#SFV@(lbs*J|jDK{YWMPn2n^WsP(2w-ZJ$60Pw%I5&!@I literal 0 HcmV?d00001 diff --git a/docs/images/img-filesizes.png b/docs/images/img-filesizes.png new file mode 100644 index 0000000000000000000000000000000000000000..34e7f38aa913838abc7b8e5f77cec337c4d5fb5f GIT binary patch literal 9915 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 GVgCc4Qb!p8 literal 0 HcmV?d00001 diff --git a/docs/images/img-freetext.jpg b/docs/images/img-freetext.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1766dd459f605160eee7c3c9e38c3be0dce0082f GIT binary patch literal 21007 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 mn&4%@Hzs#uATJq@*MyJ0QSHJ7(j)$VZuL) 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-inserttext.jpg b/docs/images/img-inserttext.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5bd3fd7a7e0d2188d504c2bb506ed25ac33b55f GIT binary patch literal 52121 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

nKJU30XO2*2jR2^ z=+HX3@gKEA7cNj{Z;3{&?1@=VPzQ|M6^xZ{mJ>unq`*S0%#Y@k0s|UcZAYKL`q5gX z*1t=CyOL>^yhx6#)q+yHhbHk)kszhx17t}2MsIu*3v%D=2eX2JKMFzsSLSz#&T-E` zcF1P8K8Ua6U8 z&oMUdolslshE|+BAUzmUw!3J6E$;zV<14Du@AH9_Xcgeyj$M^S#o)_Gsak(D_D_oc z$*2rYfFrYA5q0>gAe#Y-GaJt$T^qCVc&;$ntYc_)OVquGOp#>S4YM5fYRqFnvWSPI z^5moIuDNb#!8&760vqZ52;I(noYQ8==NzG*E812;eu77?d{ObHM$UPG(ash&rcyXk zmS*PvYIwz6@yi{4S3P{rtiV6Wh~KcR6WLA17SKTUUpK4x750LdC+ZWV{ZJoW_HZ>; z&(hgO+O|Mp(8+_v@Q(XAlbKUM{{jH6f)d$t$?|K+PAe_Bu`IOJ=lCnhj(Wyvamh$K zCFdAR?LWvRDofkCds_&K;gt_x#4-(FoDH|M8_#EM2eJH8C6y&L+YgA`}eN9sJ(?iVIfKtC^oD(~KibdvZVb8`ut-SHHVEP@Uo$yZ?u zFExa2!1<4L6{J1Mb9thO6!b#f2j~`N!%Cfg(`G}FCfAW_Pt`ISa-4QNa8gnYSRKh% zRI_pYh3W$~-^(CU-vQKgYHO>FhGZ%|;K=G5cVVhoEiLVR7GriHVm+6c*gO}|arLv! zZ<`G`wb@hV1d@B%BXZ@OPJ@E>INL67+$}JF%A03`?M67wvmIf|KV9O6^`f{HWDET6mcJv68&r6{%xT{_P4@%C;-?X|G5b8Z`W=9V8U^6pi@ z-RkN|065aR(at56Vj>-f$Z)`=X|AhH{bdS3KutRm&W=dHc$mb zQST?s{?4dyYG2-&VMik#cpJpl2eG^h)6miw1NU3}iNSrMfvb@wA^xww2B^2=DXNcG z3FFHG5l}r@okChs5gK$;t~xbo9Jjzckkk}5kDn`O1Io8sNJ}BC6|kcP4)dMG?Sq#nKjN!)z0`5rGAL~$>f8eLIP-Dfi#sWmsN*%n2mHSV$wgQ(8 zUv>vT%1rCfl^(y>w3kj)z3M_A<n$T z5GSRzYdma)uy@LME&WxyPgHTQv3)vq9JSwaeJ|4X+mE2ZBx9Ql9~;DHj#o-gOQ4Ur zmiTW!Z?GLJCMF0gF~1eZFIYMy>MXpd0%rV4?>WRX#(ps(fv$rzVEm3iRc`9b<`ld<&N(8(__S*f<~cK4$O4-^V!%xYo!&jkfl;a3D@T0E zEDUz7_z&Wp)3duPx(?&_pg>4EJ{-BSt(5^1mvqW>bhp^Q8aR2LCyg~9wZyF9V}egq z2iu9c|KwTD*j}phHq1(|!p1FmxG(rEDMc!PH5$)z8niKx`L;)^cEoPum$jRT|Iy6& zfO)ZR`qfDNfaS#sz#M#sT{M|Wq2lX&sPYqv>&>!mvC9RCwKD5QF~`|(gjSsjpSRF+ zZhM-XjN(~j9?NNt#K*`Ot02)!q0aBy=h=!T$zq(w3_qd^Vd&y7g^!{ff=@F{K%NV&*K0!|=^?Y#8~pl=<$4k~oq} z5v^x2S)_i_9t@oxjD$G+^ zhS981?%=L4YG{Rn4!olCPzQX|e`-B92h=bzr14|I$QI}hC0Hu|q%f|KrJWx#n=>O1 zOo=y#%GmsoQRk{sw%*@e(;+A}J~?7hK&l8^+&**mWV&^HZopp>HnGC2ew*G0SL#V5 z^~C}-q5|LY4L@9Bq0onlpUgnmvM(x6sUQB9BQ}+6+7}hQXFIk@DPr?-iGeggmdPh- z9%~pO)x+b+51`GaNwjRBk%$T5$uuy9jq(7j!7$!8Kfe;MF>@UQVp`NnZTarguwiiN zwRv4~V}PR!S%#xIY$~wfNc}>~zcvutNFa35IDRE->_^UKDdkjbnNo@3Z1k&kMKj}Y zJ29}2kk`>GlU37p1oRm{)&2Z+B3g zd+)rYo0G(O15=c8iQ4^V7;}p(^87&QplS1#OGBoKS=lI?!ND`nGVhB18mIsX z+4rDOvXjVPE;x&0jW!)H{@80H3M(13OWU}mJa9$aUG;DcShRCt%Gj|G5qSerG&_nr z1a3-i^I1!d&Bne3RLDWpKsN{~2#0d~4i%cR&4%m?4gc20XMKvz>_!-Lv%yduC`s2N zRzTKKEF~vMjaWc8&+e~&%YSg>q7boALHa{QL6M0htTmzPe7=x~^p@4U!2FH6fb0%r z>0^cIE6Q%&~S1iUu0FiD1nu2HQ=x0{Td4rq9=x$lsWBY~uA-R%Pi7w$8dYJ$p1XfTD>sY*GPt?;*Of52QJ?%g zn$e}o&Ne<0La&*6yi5yOYz8Z75UT{$GEIS914O2wvcO$`j5(LPU+!mbPNmIjW_W=Z zo2yk>qqu&AwvDE2X;~UHXr(4VZF4UGklCDw=!i_KyIsheHJ6yDkNvv&c?^k?Gv~>% zCCCzw4-;M!aJKFCwaX-{@_n$}2cn5i8N>7Kpz?t1x@|zLNy~=)e?0ji?0L%0&L%$& z1(AhY>)}~&!8Tn-3J#A9Rf(~(y}$+Nd2W*SZDxX^*5#2DI0qOzF@L)x`e?Z9A|=!p znAK-iT`;m68yBQ?f!WZq1(pVS<;z}hhgkHL};DrRdf<{_8qSsxF&Rd+SntUN-p~h zJ;3y1JD(m@v*Gr&Sx71Utd1Ioz0mRNN|7sWR#6EGo z1eO+uYX-! zX#_)^TA%r@F&PFg_uN*Jsr0C_^mNn*+|S@Sh3m!^=))BQ!cN=jz85of$fuo??d6V0 z9j^{1$0K6FwTzANb*Pi8j<4h&-&(l;mZI_|qHe34i+~s{0&2x{+J`@8SwpY&j)|*@ zd!J&j^smm5WX`yOqcaPuKj!zqIc!*%Nhi5zJwoKoZ1sYP`YMq4pOnWi$2u4q)C}j) zc9v0zc=k760H^fv$_vH6_V@5)v?VyykcZ2dN$-CkEofYW*C)C;YT#z;VyDUwL6p3N zj1c0DCiA5#Nz_36(kDbyH?0UyJ_jLa<6C!$nbODN$oa_<_9ZJ_=wnmnWAkgZ3odoz zAKp<Jxxj8>bC?qE2G zid;yLU+b_W7&gOt+}K}ZB?%uzdtT$~rXSV=TS^KY&X1SJf;dEFVjrVB=Q9A$84+9EqhgTgEFw$P`%EAQ_=L zvk|VOWJgH*Cn_By_oh2Y!`(l*y7?_@MY?%|SsWquBVosE-Z%XuQ{B^xwqI19-IAs^ zQ@I=^F$c}9)J7-NHy_NJH=VOQ=I+Mv@V%Rv%dA;5TcfE{x4Mmu3a{-U+?)eeurTu-UcUcG{JHeCU{h zwtGb9wDPviu{hP_m$J}{%n?zo3BJZLlx+oXk*1;#*h7`Va>6&a;OWn z9zL!$4PaE)dv46KBXMRRVmMql1bUMsCTEfR!VsVX9b!pJt`|A*!D*TEr_ zA*mXDm=bTvj&sf9`?_Y>A!r~mGGtbP|1TI6O`wIBz5MUdPhf)lf53j41o1;1NSAxS zx#%K<7wzdQbMHNpMd!0Dlb`F<{|YFPRqwPSn{U_PhFJJC+>f7ezlsS-Vb(_lu};pf znE9TsnliY*l?KwgU0px)9*)X)Wh|PF<3=?z5nnw`T81KFP+4Y+XN7*Sg^9)Z5dkAw z_D1NurGrpIZ5cP!4R9G5WxI>9Fay8v1HB=*Li1 z@8Wy)nI}&$kDnw?{py9^7AqnP&Kf_VL&a3-gseGSC=^HK`q?+kWeKY+NMF>CW{<)tZ{@U7BKp@T2j{0lK5W z+4#+dnvzUJuxFy}9vR*Vj|o4Pv-cE<>mR(%6WZqolz>#DT5@wim3hSIn%*I5ybdPY zG!;4@zsaiD{2JX3PKM^g(tJ?iJ;J(*wL0<;Y2i^;P`*K>A(d4eFhv3T)t}el3td!M z;5Rm!${~mv&J;N`qqke~D|6)eJ@0&-WXt5=iXYxaoHZ>x(~~}#GY#T*VF?Pg%_i)g z62&k5r81Ia_d9ln#YTK7Fm0!Pex7!%;lb8il#u=HtrQUEZi{+9OA|W?9TE@8L@%(` zBlJj6$v=^vjgJe*qXm6x@Xj62Z>C!z3};*QpFaM?rGZzJpPW2JP^Vj$!0~U4l*heW z%f{IgvzoZ$jkMfDuE@m0becQMUU}3tMI#a)9=K&5od^g$yToYcS2Rg{^NxRVmZHqB z6kqe|i(p4;#P4%0ekzn#y3#FyRsbqNv=&_NjD{tOfO(_1xbGz*E*;nPsd~mOa2)$~ z95%)3ZeoO|wRr~IhXyS^v^gs2c#bT>gvj~-;32 zwTh80!C21)WI@2{6hB|B4Eg()NM z^ZyOg8ZxwcIW#{d7!5kMo)u|61!Sh|J4*t_o&SSj>5YmR7NcBpUCOBuZ@k-B9g8!4 z9Jcy!)7OiV9#I2^Gsp;*3R!**$MM;o@OsUSxm|hCqgSvxS}#ANpVV9UixBzQx4~UM z4|){OsVB^iQ>x*zNZ5yw^)88%(4wUmA=Q+51BOSN=Sddej&6U0dJeE&V-Z8P;V5a^ zX^r(FKlY(Ib6#$ff@krWqk;{Rn<_cVA4hC<$}E+d0d1Chg!$|K4>tVCfr5DZro1z5 zQ3unysAxkl)pYM(;xm&Nsj_?t=?!!1{QOY~u0GFWSU>O%+?j zSp>P_X+dP1(ohy2zW4+3%3L)3V*madZf>b|P}95iZ#>O?X5SG9YZ<>N!o&`5kg?Wu zUy?&HrC6kqRoiOV-aB-BLh1EumB1EW7{j8<$3N%oC=+k4^zOMnQs$1b z+nBZS>oGX2TY30*a5zNXt!Al6t)bFKvd~JbQKKvkE!ebF?xdkwgs>>9`ukaw^}7bx z?xRz#OXHCtATaXARfX|awHfv%17JrE3Vt6BH`q7ov9c}-sB3g*PkLD83hi$~d9G|9 zb-4@noEVV;+=gc*X$fYAP!CzmGwju&YOM3iprY{q+;Pya)E_*psI{+i++u=#$BQPL zk+cEyB2CmNPMUu038a1Y{q<@gF1vW2*RD=DXcTvU%j(omr||Op{K0Vb{uR}5feSnG zBmR+(*$D1nkmTZ;3EcE{yJ_z>hhO4tPju=;1x*pXJb^`mG5wa+!L7vY zjKio?;V;o6F(DLt;0~S|4upJ^_LR0jX!s6T`nN z@q8JjqMElb!b|iV#A?Z4@-vE-9F(Sq^~(dSZ6ji(pNekl^QUfh-rV#}$gNnF7*kP~rErY`)x zqYTY=#v*)zl1P!hp+RN^!>6d6r>&+zM@N-X4p~BIBPBE~KEU5}dB~coDK~#u&cmJ` zqN9YmL85HGp-Fnsr=YS#hMW7%ym1fskx2Do0czxBXwly=y$w`Tzf4+qUf{*%FGFEuzJk&2e*@ zPEJWWInBgui7<`Xax7z}-9izT!eUW56~+{Eh+(E2W5}7zn3-mT&@h9>Fo*rW`uuL+ zOTW+Ucl%%Y{r?y0O3^Lze!mXS=i_<5%WvSep+(!focD*<_0_Bqf|n-qAKgr+!Vl*< zQRU2(UQS^77-03vzFZQV7>o9Kk=I%ufqhCL^V#R@L6n=V?Zxv?io|_jzPhd@Sr_L@so$Ds;wXN>Zv~mAQL+38^yl-Wii>; zz~%FRnTMWj>5ZCheoGIN`&b?J075OfgM-Me=TO=>{i^Z!g8sLox31jiv^>x*eAu|> zy8)wXS^*$$Mpq5aj63V%&WKmr`?ggy3&5$=^HjL*cO`GL_3LW6EUJsI3U*S4ZKqlW z;=3T!UP{dYX}la!$U3^}6Z|6E_1_Ks1&nzyB%Q3GFT?ZCil^&?Yu}6f*^{RmGopRp z*J$N?cXPm~3ubs@kKzn?e<2F}VW{<@R{U-Mxwzk*+Uyf4MeQQiF(RcR3^SPpuz5=Z zdDx&^BWZn^d<}D)j$l#eVm#d|rPcYThSVXikq69ALtVzAYPyUt!Vqy{KVvxPDW-N{ zg!67C&Do^)nd0J0nTPV_JYR$|gp(AQyRHjvXvbj)D3G4f2w@+}mGbG}r?TAXNnQY2j7<&iC5VAlA zl<>w*fdq?Y+j=b+_xNPZMY{|)S;aUK*iq=f!f+yjM|3|RNIceqO-Kgu| zGE@vvQW#s~9|pV_j9xTgdnY{OyH(5%*ihOouZJJlQT4i4w}#b_6X(|8NB7(J96wTk zYK5@%guE=v41iHD-+}Qt2*{9uOdmT{stU z=4TGrQ8&rbP7PyqI)k)|)lFZoWzY7zSyqha5GJ{KzXuX2)ng3puvi@w4Uk+T)7o*=uQ&VBBNRfliT=pzkgM+s5ik(Y_u&7#QK#7?e$mvqE_osfD8( z!>$C9i$H6z);igN7!ShX6=jI_xfAwu6j9UY{#7y`R zeRw)Nf|P{%;meG8EER{?^V@?qV&y?$@NFtcjvAV>x!@g)Q&O{N94-^IlV(+c4H?4FEhI zJMr%Z^+eQAIj&0%|0K15nQ)ifMJw36XIrKOdE#|1WUV2-+r6Vofb*#l;U*?78 zp%zN-gVAL~;4$KAz?1x)UPPscju!NN+lvNI*f>NQGDZO!@t{8>#tSok*+=DRfK5V< z`BgOYQ2w&h%59mj-M9HuJiQgv{+N-Z%_y0U@5`~teue(?%6k;3?o{MH|Ip%1;TWT= zY5k?Safys;?4*a8nB!I*L*&?#mVj*|j7xE?BDl!FaN&`XHt5feK)Q3XYMuodF z-&o?7ab7^C@-{wn#qNmk{cGaQcchP;o8o$JIXIM_WrVI3217R_^mSm_pboIE@p(YF zcppeuHdD(F)Y#eMi%iBp_S|}Qzu;Hnq`c^BueP!FlUS-RcG57}^NPTDWXpUF4ms@n z(|iytr*x>}c|~WqDhG?532fckiG_4mFXNZxAb0UV#%e|AlRme~FU040$V#yi*VT*l zF(cS(qMvBgY{w9} zPfT0CwY(U%xc6vTFeT1rL*ilVBysz4$Cyep2%|IN794A1RGd<|%w)gqv&|CcSr$&)SRn-iz`?xpmOlFlkK!xHz2G>D8^qF%f*3 znZ&HMWEY6BlkOKVlWca4M*pqQFGtiqxmNSrtB}TqiTXL-nUPdcmmFCd9)hpfoh__4Nh>!%|trX#+}1yj6Ufw>YE*beQy4 z?m0SPtqnicjZS7^*aBuFGx${~S2<6R&xk-+3g#t?`_Qb`!afmnI;S+?_@#&x)yJmckZO5U`5~|J{esV!_d9V6G{ z(O!bcc7zy6n5?|5fQc9QodqeW*Y=B(x?M-vWjAgPOzeS=)Zl}rvkK)^HQYqAHw?Xa zkoO||K!`xGcfuj)byN~1(0B6WaE%3}`k6?3`4mzs9haPyJeA>-AKXC+8S zNgC1Xd2K&6eD+?=cWuIWQDO~*&IJ~>=%$y8urvQGNm}PYiKq21Q+?CEGg4 zLVP9Ux8VZeyD8s2lM~%EwJGIDXkZO9wz*#FA)($8E{^jBZMQ5am2(gMIbZ$=LL#_(EC*p_2$~FL~we^kJ|c{Z`$481XT^zvX|uPC;Px|qig_`^oA!* zVq;>kBh(y&P!Q=*Tw0NJ|1)o5Z+r+26+-FdU^@S zwDHmu_*W!?I*5_s*tDA!(9{mbarf36ou)lC)vJix&VRm=wSM3bw#l$VHd z$sq4imxKaptFGmOymx7|Xf=bZ?*Qs@Ns*M@Ldkc}(Kg(oG_%Np-LW@o;3-qfI?JR! z&Yq|J@GJb3VzXDA@^}Nzqz~y{O?d;#*a5nOa$omnXKZ7MEhs)CnzKN)!A(dL3B=>L zeYKqU40Twm?nfOzcJR&7;$WN7n`nF0f-6es6Uu3bOPt#v4Fm5OHtBqPV_!?Z>|FdZxZ?{+J9aK={;s{39t<$zhV}=Xe+$V=IWm(J*rZxPe4GFOglj$0*_NysmjQ81$As@-N zOUUrt1tMeGeKK6%FH_(Wx>nr>sGNbgpTt)mMB)zB$VNvyeJKq{hYH(Ob<9<(#P>6e z{))emC3K^-AR7sMGUc}FXFTYI*H@H$Skwehe{QS)aIHn<;1#(`lbLaz^GJB!Dn6Ld z=L8IawPr${HZ|DzyGbF4vFRy%#Buk@B$>NKjDDN|d;dwM$m@BRsj|YsBPSPosBod$ zZU2HIY|}jRK4{uEsf%O1Y&CSytV=ha<;wNbo5^E&c3Xj3aJSaS5MWM!RbkS}PpQK> z4K>B-q<$_J7b)9fbJw3Ph82V#Sn{=9yFr}B)evcDP?lbXw5RpDxhbioBP3^|qvC8Q z)N5byETXtN7;PPOGwy~>Z#Jc`yYA;O@U8P1sD&{z$)?w;-FKvChm-Rsk%UxTyHvdC zdp>W@^XgvPdN12jjD8P#FM%Gm>e}0Y_g&V#?fe`<>1^54WLPaL*4P`q{7E z0$A zT0q`Y#mGB_n(}ek=tH42U!v(Nj;t@2nIoE4(-n?%YwpQCPeMbA0`hU6Mr{JL0`gW< zzf#U&rD*M-eFL9k0_}wkz0T|3FJNj7<=Gu`djbhO-`ek3!o3m&N>Y)TD1`1HV|3if zOpK*oc;1=%Wk>Fi*FI;YD=&auy^Jea9lQA?B3HK~t#VHHV*kXfpRc4BeI2VJ3PQF$ zV1CZwpsWz%-p}x(5V8xAjK8vK@ZG?q3&`#vM-UrU_4*$0)LzO$!X?`$FDApk zjIzGrMvJBw7-Iz!Ox}i1Dl0t4V4Dm@Qb05KzC&M}^xBu#mLm?C51AvPj+;Syymaem zi-ta&RpvP9aT6Rg=<<#aQ83Quqb?<4^+#&tdvI?*27>XE={@J1zu=HUcv{zF=4Sj` z{?0EV`>{8TA$_UvK_3o_OyORQ+jgyn6WeagWzl5;Xi=h>PyLuR2Xox3`OcZ4h2Vgn z=+vw$89>_F%~}GN)SP(aWO7ldOrryDCZRoWbg;Ppcz$(sX9VJ!Ch{nHZ`4gs?EbEX zVgYgr!!)x}r&Nn4r5UmqNvQs1?`^VTwaS5^cfG}Rj$7*ZHg02FsLG843pOaaJ_UIjvloP1DCkh%v~Xp zj^`3jL1tTtR=l5ZOR_+W5D+`+dDWFof{vmwE|mCtS! zc(;4+;(X0AL%}$We?x``bYH=skc&MBXN)d+=@L8m&2lP;?ac<(-j`UlI`1FCxjdU? zH~ING>o+wHeerl?w{FwUT$gdCR1hh8N&{pGv?$(y+p?_(Jow03HP~3O2 zap-ZXev~UMdALi@eP3w$6OL|24@)o7OeMN3)0w>bCte$PJ}MLrLhO$B;XLD4lCk>* zW5<`{_*`gPM1NB(2qI|F5~l*0W`x+=&LoKjn8b@m3V2zQ>E3OlQpTRqb2`AF-LQv* zo8s;(Wlg5PUaIU-HnC&J-t83`m>HJI8BF!$N4q>{F2(b4$}MJwj78 z>W7H%#B$jdslixD#}3(+qm+JQN@3erZvO443+fkAIsh>H1jIj~5lP^0106yEd*g?>c*AGyYc` zxXot^BpRv?sN26APF^9sU;p17I+bD*c`rds>RGG+pE`R+=Pokk

7#532Ozy^m9iIj6-P=@p!dr)ZXM!Yf;MdRYEb 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 ZV~K#M-Bp>p<%V&)=eF3e;Ehi@e*v+N?ePEr literal 0 HcmV?d00001 diff --git a/docs/images/img-markers.jpg b/docs/images/img-markers.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6766b5dc8ded24f124ec2ec2b6b9389bec28d37c GIT binary patch literal 48248 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%0A(@(U_f(1&b`hMAi4Ucola%!UbK^rpEov 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-matrix.png b/docs/images/img-matrix.png new file mode 100644 index 0000000000000000000000000000000000000000..d10ce9015c2818844a533f83285adee97cfacb7a GIT binary patch literal 979 zcmV;^11$WBP)?w000A;Nkl_l zu>*;w2B6oFb~59)zk>Kq4%Ir8*T~#w9qgc*b5WjZIqyL&xfzBsyiOskf~rW$K^!_~ zRXBFB%(Z_x!ZPTDSCS6kw1lHe%mU0t6NoQ{tbr<=-e)o?AiG9ZpiM#fW-Ngm$~DHB z(*UXW;kJOvHKJF3P}7ZA#mT66^Q*}@8-=myuGNSdBzIxf>qkDvenBzAk$X920vPE z^$~LKh`j|;1IUwP6FAdwj(eWXpnGh)Kj$DQ*XdAdSfc(u5Cy5;8f^IITK-05kxlr4fKnfD$|{WyJQ85pqbj zmDb3xAEX&5wDvZr90G}InTOxvR?zS`RfFv)Cp)WOjl)B1cOig@!7?y&weu39%?GWrWS32I$fu(tZ#Z0?K~SAW1zc=XGFg2B{zp zj^bo+-U;DW(0w=XorWR;&Gif*_Eivz2mDD>4w=R>UWI*kdj;xOJ>*wFzY3HPxev7d z6L=MLzR~0-@NcIP`J4Xv65;Ff-=Kf#0X?7x^dEFEmF-C3UDE&n002ovPDHLkV1h@8 ByRiTO literal 0 HcmV?d00001 diff --git a/docs/images/img-opacity.jpg b/docs/images/img-opacity.jpg new file mode 100644 index 0000000000000000000000000000000000000000..beb011e29e7d81b52081f9df1d4b2ef184da4d06 GIT binary patch literal 4331 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-original.png b/docs/images/img-original.png new file mode 100644 index 0000000000000000000000000000000000000000..5c35196c8cb4ca1148a089ad67429578d8d82e66 GIT binary patch literal 34187 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

-G!yNb4dR?Qflb%8sA z-QJfPiJaa91=Y|fk)m-h6oq~V7-kkzQ2IAV2`V_5Lz+jQ#W0bNe#z+ME_=qM`W768 zHQR_#{rPIonz7jc_@vXkCh!GJAzp=Ghf~$a`o6?sk^HlZJ5Wr#^~E9vVG9EM?9yC1 z2@+V1{p3%~fusb+bk!Q!vE&7*0aC=-@A8KvV`u>&*f1W1E?MHIT<{2VbU;d(XE@_){ZCRNPh(H6tk9a}y+!C&Gy%WX1q%_A^Z zc9)Y@rnFIrg5}NrO`wNc_&waEWkPO2tCsVJLRpgWZJT7ZI*Z~d9qCPx5$Bp;E9{va z%90B`*B5tl67^C5O}cbq&_3L3>7%n2!c%i&>k<v(YTbGpJkg-KiH*VO4eQIc!}Q_jj{ZBkx5&=RWIahZ9bR~T zZx&222{w}kv_^2uUp%!!Gja#r(_)BOnCVYJiQPS`t2=1^+Oiav?*V#0kSGdz8i52R z1A33l7;Q%&AM`aifU<4sxq`wj(#-W$NFU(!tk`FBBxzd)gK z#Dy9#*EnYpx5|3fa6V)U#3X}1%^#hTs@j&Sjkg_FxLzhppy`}O3*&KUGi0J9N$3{j zMN?xoLRS<3jau_XG`bM*kZ(~cAG+eF1g%}YRj#QpckkR11MPjs#$JIquiF|1^zJI& zk7>Hj%gW=0(O%O~ZG9Ga^D04v`&|sgenUkq`Rj>$WLW8j_WMBgkyr{46()5@IHv*Z z+?3UmJfN#pg0<0;@hNx&UqzH~=1j){9n?-0?_b zUe1>RnIw$;>g+=DC*Y0cyDw`5vz1JwW_{x}qXdKe;tdV!%Y%viceLO**81E*mvELlOYe$i3meY`Q2KJliNnhy?-f;=wo3N<`9k`PP?8r3RJA zHa~_TjeXSWa%jW|0w;cpwdI^=JHWT|!q5-GO=tJf3^&$b_H!A6q5zNA z+hr-&fi+(IhQaOyc=p{MgXZ9?Vcl65l!617QbINw{SB8jvshXm+o29uG|T3JjM@Uq zS0zXretoXSZPtfRJ0ROHaH#JxLWf80b9K)WXACf0nvWMR4BEr z05boKX=ETh9uzDoE#r-TnFnn*X5b1y94DFYHZpbI9pnm}&8PFCY&U`O0*3f>0*@#R zJjCI`RRgUIOmeQ!2r>=LQ&IsL4Ew}Q1Y_UMI}Wu*v1!k2B^NO>58@;>;tpZJ28^~a z9WO>XfC4t7gKNK0Z;g>eN3r>&HG$Q6yg?5SGToB=8$jBfI}HjI4h&_4`oU_9og(%S ze1)?S9g6@2B^YQ@=rCx{$c+g?M6!^Bbme*v&hF}Sb`!D#Hh9Oi0(v+%c0P?QNoh*5 zE*|(Y@j#h_P8gYE2Y#A^I~DsaCCzxDNTrc}ROl;22 zy7QMT-O3kw8Rga&+)dk6>jkQP=he?Y)SXvf<2SZwxUZbc#YyGY9FyTn7{0zu3jg>n znwkfmsmDyRq@!DZi=ET*_{8#KJ)B^Zm$1!4XyajMChI1W$V1iT6OEW$sYUI3;B1&*BKnl+Q)8sIDgS{p0Q!_ zymw1uaGBq(H_h~Ny59MeKu&+hBJU7`OHgMQ&EsY|BrjPzjbdfLP@a8_vYAI^OTJCr za3MbUR1GKYOlW-~O#|VQ2l{d)-fsd^Ss@wY!RF896>|-Ae=N)At<7Gb^6YS#m%{L3 zDU|g|tXJpZLN?!2*8ZtBudb9!InW+Bq*9m+yzpjs%fVsqIU_fsn|o6B@m|i3Iiz+g z%9tl4?S$`>q!Us-qcU&q_*>jrJ{Q2}N|0SpuE)h<7~j8r;J~r*iXiSnsU}GFi9`e$ zfXYNv6_ha8G3fdaLJv*!k>mZrT^~F9ei8gtm^jZ6x&ovH&WN(!^{W$>`T)W|3Pi~l z@5bP8$QYiGQ3n%91pt6r%7l5VV?OwbACvc535asVo>QnDkA}g6pR~B_!z*gH=%{xS z0*+Bw9!=oGm<8%Jh^g#|!IU7wGceKEp5k$bPX#kP(v-$@2hMO$rrtFuHbKLWve>(u z1HGwh1O-TD;N2JlCG6`&<4lQ|bJ1bn)F0%86y5S!7ZS^T^)2PPqGa<~9PS49tcb-? zZ1U?v9j!w3S$utzH8?!0M(F=AW-Y2tTg0=7IX zzv`nF=PW!+&|I9YpTugxB3K;}4rG}GIVMWZ+LaOwvoNgORKQ_O-;eEw05qK{v@n## zX7rme%}Cn!S-_LR*rlpC0k2aHj6Anhz~R41c9UJZM#fT2rb*_sfolCy4enqr$_b+{ zbkA1*n8Y(mWbq&!k1(93@`hTKn=lc~$#TEh?*HrjBISuGN@WyUqmUsv8jTD$c|T~Z zHxc314vlQ>CVfN|cY2)MR7b3Dp2=mi-sW#o$y(5Hq$o^FE!*A88XqJy1P7CO5Z;P% z<#0_EmhOY5o>)Kl*Hj~=5I>W1Zf~o#=p=ba9=Aya)EW{ZKZnBUjo^`b3{=IUL&|W$ z3gT#b(vVZMvt%bbG|ILq#-|L@Y#teY`hwc;ccu4?`tXaV*MClB1Ddl3e?scu*mS z0V;>emZGCJtPg&64S1? z%-{I5L@f}8103L?XyS83B<={NK+YQ8nxnfEF{IX0Dr2=*jwW!#lWHyD($Kt{(_@rt zF$Rd1!+o(1lL$-A4ont{s<`2S5N8BOzb=o3^@{XM1d*_z$8%sR8V1I2`Vy_6H_Rsj#3kA5GMa0SC>L~~gnY($1$YJI2i=ioi%jY8BrtJ)%#*2A! z2BNP5>}B@@UVH-?_5}%)1p~2tO$B$^ynyg-JkWgMB|CFPOMvUeSyo*mH>X9G_K+*trb6HJD8@DPNi@(?zD3QrLj^E`Gx39~Dxw58hqOz$>6aMraCBm$jb{Il~V}*f; z16gIOvTe*vlMq5r8b0UeHp8PY6q70vp^gQ>QM0BI)}3Qo8#$a!(IPqbg)yO&nuP4Y<%0XSN8z-(8W^~pOs20IvKyC|iGVgED9nz$h@&IDqDVpW99cW-f|Gys0AhzP1cj76lHo+uqi;;&Cvf`W+e=>vanF{ za7-N;car0WldCBfh#WNNIN-GWGexM9F1J=6ml_ZTTDW8HE)D4Gg~A<+)W~F32~RgR zXj&6mRZ}EgR`0Lt6IB_WXd0gC=;jpOrQ%oOAos^3!de#NWo62@CHvfL%m>hd4U?Oc z66T|Bf+ydu_nTTq1Cue2rYAb#qsFa^YA&4nBjO<|aJb52>Q{mpymbXbC>fOQ*nl#+ z6bX!=aN#=2iP(GQW__e?UC{9Q z>^}zF5E{V}-&{f3>(0txB*lo)Bl*~9V;vd-x`!r<0Ywceg$pg>ENQ@CX16E^f4t+t zND++SxvRk;1R!`28jZ#@ga|;GtIG=-M4|WRWP9`-c6%b?Suy7zuzpE&LnTI8jV!3L zFL8s$sqWwn7gsdEXTyxeQirfcmu?g+0RIYEO_{beOb+-uH_fxdlj>OqlSh8Ld4$ zp4HE#58EhIq6>pS&GPXmh+Bd3m!C$G35^VG5aCls<`A+NTrfDrNJm8X%};M2<+}|( zUEmRluu~E71dRst%C8w#WgTYQz{K`9Z90%E1`71RVP0JdjlOupUa^E|0I}Veascm^ zNk{#G-9lRpKLg*>yht)841fiDYvTGSm(UZjr95DOfHe>)7?djrhF86AWTHn!xtnM^ zai!!RE^fuXhIFrwknn*H6-A?^UPfFy8z-!byJC_v5 zqEJoz7m9IaA>@(OBVEFqX}~TD%y2%#->~o{SF%W!3<*(R&`mw^B6RdH-6>H3yh_mXoBt4hR>0I&8$=85iyE=ihLpkZ`6{cxkA;k^!wA=#^*(4m_hg@CbN)CywCqmFtOisFnY1D>R48fBx`a)*`|=~;KH8O#b5wbNiFq~;l0s#?!Fg5WVc@I z1WnP;^bRd~q&~E??;^&R`EUKjz6#<3Svg4b!){n)SF>;^{X~)>vUZI;ipafj+rAdH zCaMZT&K^wGiD9o56CYlHJRwzlz_?uoe zh)Zw(e4##{ufN_4W5s=$X~3#}e@HDPv7>IH$KlfD(rJ`3Hj0(~F;t}zRPpN14(vvr z@GF;Xlo0L=(ZM}6pD$3jsY>&Ru^Sz-$7E1E*<@r(%)OUua`5*@2VA0eT^CrpscvFL z9m{FiLBn27cB_#RfBvZ=5+XyIqJ#9cs`(>{{2gF8lssH*BXCx1(@J9VZynH_B|!wn z`N%(KZ%)+Uq@SS0R)}3kOA@m@5D;izXEjBAK%MV%Z7mt82x{#qR3Y zM3HK4dbjwBzv}Zg(F0lfQj>#df(NU_wdi=yC>$K9&<43uzKEPI3zZpe%SU$HB0$1h zOyo6eV*gR)!VhzI0#q_ z$HI;vTFMm5^7u|D(tH|@w9BA3JV1&s%5lG#Isv+XIA=vH{*V6+p_Mkak})3fboxALt!GnDQ}}KpU}JwPJhi_yIO$0klx?W5@%{{l{pHh-kTkc%&_*qQNT( zV?8`9XF0&hHHr@b%pkTPG4zl=I+$*+`TbJNjR3&55l{hJvVH|G%{Z|C`lmV+?pqWK zB_u7k;!&AmDmN;l(63@6MDf4rJ@h2ToOgzE6uO87Uj8*wT8WRyU_2*Wd(HGNdSTFaRzuH@VC5IDb)Wf;89$UbtCYnL*~c z?p~#e=k?6aNa|=q5j=x~-mFKna7gX!g^Pp<{H(3-l_#-Mu$wdj zAHi$=dUORjWE)Xmz{6%Ip|1O@Se$rO+&JzAva_P(f-G)K@OsS#h)H%uiWk>q49fnz z)RxJlVNhh66?H@ngV5zKTd{)t%?vp*1xu@r)30S>c@M}ahFf&VoH7pALV`e-m7tLV^+yqOSiGO??o(WI&Z>=tZYTx+5d;Fvx=&tiP|*oZo%E%-QD33G`PFFySux)1t++> z1h?Q0!3iE9)8D^l*389R^vz*)(_K~j-EUR*e##Fu_yL|?smE5ASm!OY{{5h?y}odM zifw|BIG>6*Pd==qacA%=k05y$cg){dd6vmNS=@qwBxJRHCHg6fG@YbOc%5|AYQ0tf%k2oi!%6e?u&Q)Gw5{Ak;I#9>FflpxXD z!l$OT*7ssfV_U=Y0OUrN!NJAttRy00X`juJvxm|)Roo3XB2MGgVs6zdey_^c&%FQl ze1qq>aNaZIo?KX<)|e|gRc%uDxyr~-3?EU21Z2e2NUO-?L1Vk=(S7|q)sKjtjXj2_ zRS{F+T4@cZv&KO7vdf^U7$A}fOMCh!TeonmlduX5teD zmweYlm%0PkOG~?BD`VjjgYexUW}{*YPn;b->U*G+pShN>S5Qa@s9K4k^X{x(FX2!j z{$~kyzp?9~QlKx*qN-<}uA!-8o}T{KE&b2yOhVozSqA8d#z6tz%y;I%_U8QgX7@&g zc;SocCWK$>qH&(RaOb`AmY(Y7lxs7!kRf&dTp<3k0AIAG&hei4v2eL+)%Na8xU6OM zKUjCS>SDB>)QLnAk*Qn_Rq)3*MVF+?%1U@RfqZ3;en+dcd10WI4fsUAR^>0Dw+^KP zgMWN)7{2jvDRv3wTGS7qMlMGLC=gy+3y2 z2fsu@5hL^?r}6_$Du4SDpOWmZN-9Xl|E&7S_h|QY_cM!%W=Cw2Q zFDPcM4dPbNUZ(>7>$KP(`!9K!6b1@}Sd1vLE{N*Kkq_ikP$3NN!CC2zZ zsubwGSd^=1$#bF{!ufrLYr%p_%3z-}ZiAC-=FHHZn3XDj8AwzI6hmauQ6`)$5=Blw zr-W90olikXmc~Ycdf0kqjvNO z#}uNdV(gmOT0+4{7I`>YewJJm(wrn<#AHZoquiXVEd(7lAWD=%Ms8=-n|Q2t+*`7i zGhn}pozD#CXp#zQY`cc){Bv>4maL;>zMw$WISQYHNdf2eplkx3jA5`qmkKVX$<^K) zMO}6$3+-HM6+&C4>O^u%jS)ava^|u?Y7=wKs*6SjKGSV#FDBVh15q%2O*1b> zqeNl8Jfe5e4WDRF#3@JEzlyAxR`AnQW@Q|XgkVDbGObJw> zu*Dya?u?^TDwBA%r=h^duo!@9d_+Dll~-zNxpY=xkCZHWp+(O@>E?OR+e5>;un=|% z*-6;bxZuj1cCh78amCu0Y+YA}boT8srQ$;qjb?QBx;PZH9(*D}94urPV{9ESHz=qg zxRQLo6@{t8RmWwZkCi=L%YGqJZlY~kW@;><3^+?w9EMCrD45{>Z_kY7VZ?P$dzrE#;xast? z6#Tp&q7XYXX;Ns`@Q`sENdLaU@{mDliv%}IZ7;4FT*L|D=l4uW=XG0{eSsx5SV+nZ zE5+7iS6unx{;)O$MrVs|!f9!-M_n2t;DbKPhAsb*Bt&FQt`?PR$uVVF1ygX zF&ZTbh1MqX)_s2Bn;EXp)i+vFjT3}g#e$?c^HaE%;4}Sn7~2huQ9&N&jw#{BYStV&2=Fe*=o>gI z#SAnez2WbEE=X^SW!eyAtu_IyiKGtk$_v+jK0@$xd&=%LUu$RKPSo;x4VkVst`AR*XTV3 z_Am@au0=AU4bk+XqLSi7(0RTRkY!U>i-YX5tf#?quOuMwa5f1^&N?I--F>(lujNy^lZ**pADj9~{s;CPu9+h~? zk8MPsxwhI-R_)BY8XCBdfCzSnqFKdJllK~e`9%I!;KQjjpVdkqNZLRltdP#9(o0Nm z28r9DESVyIyTwi}1_4X7^Pq4-WQ%UWpwZ`UTdUG;z#|Qh!`-ql9Wldkp8R()ck&C> zB+gF78sU(Oi8n~eK*_DgfZ7@DyZ-aXwld_5uG6~Lp%t`NIYY}5JclY|R~`SqA(yej z^W-Qj735aL?PbJO8d!=o=2zAP8WH*vY_t7V9pgPx1c8~0yeisUFdrdC=zj+A%lf|j z6c;(Zsc2}02vFkfK{%*Fql-Z%d%vRG(4DWo8IZ!=A~ls%NcO=|x6UUcc@MegwZ@lv zhqwyIwN-XZ(aXHJEmw()*xA~zOH=%@0;lIsV=g+_j3`E=#-#HHFEq03Y-bui$MO}q z#18nmAdE#q?uP6yCeeus-%(IEQVR*cRTVA7lZeU+sXX$y1WlL?8H^7i!l^Fd}8C`459HrjMxR}kE{qGLK zry_DYCX~!){=L7ZYAe=cvKTt}8cW`P`&Zb@F;Ikt6mq+uCdw~ic_s|5a0W-Fos@uv z4yF)967kqu|UZ{9-2In@4p1#EX5Em0G`S_W%eb1nBz z28n+JAJ0b5++D`D=JIcTX1ncnv*;HpXn6~_=j#(a zeRRE@wmqMY|J7$R9g919uc7>4+U${=RE>Su3@8xx_u1}p|IfU#$VHS;$~_6EQ%){b zrcipnJ$O>ev13vFzlVmV=Jigmz`61o0D*u(#y4vflUZb@m%V?eP76PC94JCPAzPwJ z9FrsCI6IdQq^{Xqm|!?Ag-KoFGl2hG>Mp!#2;W!Nd7!;)h~Z$@gF{y zyg@>qR89Mwdspt7Sz^pA^h3#n-kz~`R)%%OZ{{Fk92r|i&v|AS$#yslg+;9h=AEu& z>3zVM{qwR^#=v5T=LeU9Bo!?sRS`Hpm`5Me^cfdxVx!%mmz6J$Jl>I_I5TA#g#g)- zg)mfPaZ-!c>sRD0q)`1%cVkZahpO>1IBiStRgGh23=iIj(Nk{;|&HMX&%WhY_6YaZ*7 z7UuAap|r3=#3aNE9d#Tq)a~(N8>XX63w0Z1$0|2trQ~4z`+Or}Gyoz+T#$|Da~o0;j3kO1j>UCJCu^l%4y3@ z00v^7gfUOk)86E!WB+Uc35^MFD;@)ug1kIX<333xzLWAE@%K?sgoTCW1Cpg~irZl; z3r^7aK(cBuU2;{O&mq;OmjN#(Mcc)UCxL^`59WDyt-)}&3RFt1l;hMyHZtJDxG+tZ z`zw^SuG9r4otS3}3ErAQkB@L9QX&#X|D`wJWgiwJnFWIqFGh`?wh>^+6kJ}}@AP<& zClL7+IhEZYbq)=xXHYHm7t11R0d4c^N(du4z!9jkKV(!%Q#FI-q@l3{Fc5kYic>(I zS(t9a+#&d%tMPkWPEbiPQzsDcBoOm-c6KuIVbJ8o>U6r8V=$2k<#O8}kO91yBWpd{ zGAe6lXSN?Oktjq{K$sK*;5ov4a|XA;5a^zec(tEPJ3bfnJyf#yMe%9mDE+D^&BHQH z6X46huyo-uy;!YRcd=t=?wLHWk=+Cyp7+ntFUG%_JlJs3WQdlYtateVE)9%778Vwi+=d>VyvYovDqw2BT8x)3;8}se#Kd&WB(_+t8IzKwH#Z@1^58<-Di#Xkx#cV~@^cRWe2{fbO;5kh zm<2{KvagX(CG7(t0x%EIvP?C8t`^bgV3>3tHq+!; z0hKG%Vo^0cKOMxf?D#)#BYiFNIlP^2TQkT_O~o`ZN;#Ox<^Whm6O)f*m=JHuV*jg^tUTqxgf5+(b8_!N-+e_Rt@GVX_pU_s$hRCg zm$^`$ykvsuo{kR=e><5%hL>onh7qxH(uexTWwddC>tQ@k1TL*85QUB{9nZUuBCVmJVISA~@AEIEd{pq&@DZb8^VRrvG^+4R&|Lkuwu2b| zG-Qz}u_@Jnd&ln|IJ<%Wgp9ZP{Qp|a=0M9;tH-49n#+$q-Hnrc9k|Pm^&cG_^}`kL zu!{;lGS$c+h=F1v$zUt;%q#YKM7Ix%DiXN$J=e!5?t%CigerUIzOH^ z8R+TPY0ELf?j|X1rU?mFW1@3 zXeQ-BYV3-4z0W%Y!hXC<99A7&9#_8r7?UJk&?u{vg+m;%P>yARp!eb`w~i8U)AXHy z+_DFj0wf>K422U&ne*qdhmq0PFNH$B9smsX0q;~oHWFy14CgqA{~}3e<%p&e<9T0k z((8HKb3@f^08?l%`-S8V8_BBdEf3J@)SBNbwWnePKssO45Ab_j(IWA^WE&%SI$w&c z4l6T_I(oS~oD=?g83vCTwF#h3VM+XwkSItcDA)8o^&K3T6)G%@yN<*N5Tc^4Bf`S>%g>SMd3NRtS(Dd_ga#3Gx4gmh8oD^!VsV@B@H( z=(ZoFA#`Tx6~cl19~NZl?01}ok;xGM>#bD|t?zoB0D%ouD(y^|Mzs`Az~jB}Z{K|8gr4IF`BHwdjr_U# zv8xt(a(t{G`0@BZ|DlWmz>W#~W&MtC;Z~0aRD^`z&1$Ja33w=ik`mlD&i>)7a!yR^YDVyNf6ObQY`wyxJtWE&n6G`9eOb{}Sl8HXEtziPjiru8!gf zaM15jw7FQu_FUm=nrfoCnf+R3QJSVq9PswZfxvJj z;&md`x!;c@S@g6AxHYIE@2umJ5`uXL#SZ{yMmJ(rnSp^}txiXxWa%=#&)Kg!B?SY2 zOZA=@IPYC6MbL`kgDs=ut4Q~^30#aHB_$<*3R7xMfQ>mI5pc&*h;z2d^^w-w(~`V8 zEfBn_@Nk6!&nYKM37MN>x0fPZzHgpYEW15cFZ1ol%)twK7w(Hi;8pk8`P3VeOw0>n zUb}lYn=BB0dT3@^i5x6|eAOl2r~3CzCyi|Rn;CP9i2Q5lYM(3m$Ft)V3ZDQhu9dS-cK{z^KG{YD?)Q7jrWwN<5rMHb zsS5QQM(+O##eZV)|2vc?lPD+U?+WEo9!Q>kp02dg#vD$I)U&5#v$L62+|o-WlhVqD zd?_}9l9i20`t48d-u1(ku)(z1&-bS7>8(lT^sjY{UyVrN+@GK{R1=7jA%`Ef zocK`#(GK70adN&}0oWxk!M<&WW3eBbQcU|kz4-URkK4$gQzu^1%I6P}o@te=xgDD} z{5N5i`k~mkB9wJI?$bY=XGLn&q^2WwB@o}GmCjEep5{S0%9VCtd|s=I)jEZfW+PSz z;o=QzzFnIuHtwBzM?Z|13g>7d*m04XHyD$t8=Qm-;aQ1YIteGqrO{$X-vj;?5*RdO zmi0xJ!0bC|TXGgCS4xrxH{AyzIL*Z#yF|ktDH%Olai&-{uGqB2Z1%^c?h%Gnl8S#T}`|BDIi-Hav&=_l2L`ou`+(u14N(Cw;gaZdZZ|tZhBnBH z3Tp%;D5!+j($jYZd~^w7306k`1^|!0+kS5YAi9{?*fzp( zAj%$*^b#$7Xaak1n|T)^PD#pw|q;3aWxfTI(^&^ON6PbVH?I7?`X9 zbViVyS24}&FB04B#a~yWtnx%#r?Muw*W!%5gj!tc*}#HB}oplA_a3BMVO5V zANmY~j+$>JW#59lVwBb>Q}iqP>9L5~Ml4Cijqht~|MTBe|WsEWWI2@@rf zf#iNkBHOY9;px+@oCBD~#U@jkjyvXp;%sn!276-|qwoS`zc0xT1Ss6MX+jf0kT^@q z5TbgN!9seg$`e0?ZSwR3ynZ)-VH!sK)s%B=1<5w?7sr{CLo_&4V_tuXNuBZt3rwWu3lLCXe3U0G1v$bb7|p04$|Cvp zI&eAvBuTc3E|u(quJ|by5@oC)@x+fx$ytqupcG@bilz8jC#7pjb-I}OL8uz=^`iy> zlW^JT>cpgwg&QRi*0h5d+^N|CU``4ndhB;x?^=MSp|avav64KkUD+tbI3HKf=h1m>n-nSVT^Qz(gucb}@xST{#h z>29O&MWqevQLy4s-+4+9dc6^PMe92D@}i^}Tx=Q=$LUvBYBZMQ(hg+sUX!Jd#6%-G}UDm!Iwg8_x<$aj>VIBYaS*Qc|h7FpHPPFqUe9Sh3Wo1xlP zYeF0mC>yD51Z#P#3ExJe3289jDdX#+LXAMj=0rugg!)PbUG_sFSRVXS1|2PTqwd+fF#jtpW6Lm;%gOh||cX{8qp>yF@}|b-?YzIk#%FbhnBwzO>n{F(VR&z!{7w zD8JTuB+dD+Nk~=ysIJ3q^D^;RAM&D$!3~RIq(!6NS)qaToj_L|-L8fXfYT{sE)Pfr zGebXhQM2*JN+t)tFE9}sG%_5S? z3PSLa$}A>HY4U5P22KgogjR?Yl$ER$%D3jiYE_6*b7k;puq#UaS?}NyJ84QuXs+Pj z75%_FewYL%w>zy_bJme%x3yvC5ip{_)Ur}GLNYW6V7&ngi(r;>t5sBT%Kwy(0ox=) zfN{*vTa4&F)tX}Ha;p>5SX9z(*@sBhUI+lDzPbO<1smsN@Mpn?U`)o!%8-m%`}{SH z3#Z_rK90b;=F^DXC(F)Q0$x=vEA@*R&>0s)9BOtgviA*O2A@MBw zoA*XFNmeKa(Tbe@sbn8=+9<5mZ=%X+k_!vaqxpW4F7yZ}pYo|$pT~^j=P5Tx5-tz2 zJdImhdMW2A(74#5Vx&Ps_E`6jCw4(K7Ssr>s)OnT;nCseVrcR9Y_J2twhv>;J%{G> z@8~m*7v5!Y9AFS$A!K$@ai9HknqIPC+qD3%6CefxO9F9pEZ!S?`QFb>eT+r7bz z&Ncx3SjUxHB;1Tb$g3(Gn<|SKv_bhz`Qz>Jqj5AeN;VE)1RsvY;~JTE&4B=JaN^LA zIOhsWILSW%3VMBR{BX9wn`vM-!^wEK0m%Mg8|ps&Ct%NmS;-4_=`wJchOtv$9UMzy>NkwD2ryv-z>s--( zx|rZ`+pg9Dd5~GRT@g-@_UQB!a=bKAf9g9{c+32R$653XkdFHPUJJb93|=jkPs@-b zs1>G1Le??vG1dmPn2g2%(+E290+%2OVWx9^LQv^Pn=o;5evE*%5tiy4VO=>Q>bBA+ z-E?(a9MT`~uoWFEFnKzfNJNNjAaZAB6pP(F0cU6v>@Cjc#5RR+hI{!PJVEV{n=q)N zVIm4x_=dw|jwj@ES#LDHj3nD9&I~p^X@oxQ1@ZbmF-CdG*G=(yTx$D;woDatz_VF( zLwgWRdWNl;%nJ0)6bKO*w}P8tLS(R_GNHQw+hfc?GRmjP^GgFW!SRia4O}>=?f>?E zD3Va0)ODDmp#SQ9HNP#FbY3Fyg(uxqD#Ne>)+^v{^h;d`4TKY+6>j=xCe&~GgMo48 z(dTKFes#rnZ|6TC)t3Rr+3Coi+z&_EW==w~G{&L9 z87u)UKLE~Nl=QOKyi=X6G7jx{)U0Zg0ZJoWHa9oV77Q@Expt<9H=#vv1jkTw$pEhd zmkfiGT?b=Q% z^tNSB#@yZ0bHu1O>f|vgLU}nG(QvFH4U(IMNfRyYjJcr81l=4TLsyqIM@GW($>3uZ z+ofsqs%LLWB?n?V5{{8iaU?k*C?dU0i3Uw$&$FhsC#^Zkr7Y&;ngnA8#vTMRQ;IJ2 z#=9;DHIQq*i6ZKk35YsIoyW_#4`ed?j$@g`|EuM|t~ka5DuQBB!6+8Bx;0JcSO#amNO zOch_AMGyYr51oL`Hu&u&lvubkeg7NgCeg<3Mce^?<~xHvyP@3en+09e%Qlh6pbl?R z1aVV>M6iS|2#iw*8JaPk%m>0o^>Polo;^cFNy5uej=AnOm=I3V_q!bvhjogB%zSbX z(?dhytsL?z{;Rp)>c?Y4s#QtdFWJtrbCf?4p`UK1ST8#_(aBL5i-+7+VZqSCS=A<&(YL zxJfj&*dqVxQTSO|u(KoLATu=ei5HZYe@V%%b{|kfF0YB^`}MW=vgu=yHmQh0Js73v zHs)su#bYDYzi+V-t<9rY{vo5Kvn3OghhUUPvcCwf_%z$TBQB4~bEVN}vj1a>F*Fd= z7YfZWV|&imKa(^QHAt36%Ty>4P$_D@)~KZ8{{J8!aMi_0-Daf7B(Qy6mm}fwAZkT!|ZJLp&M8S((0a<@IpW zN}re;G2acU*(oZDGfj#Y24CDrAVy0ZMfz-llZOrRqRyP{X4A;q-P$_i0f2g=D$$P2 zNlzDW*Hb3i%#pvP{jsgd$Hl)1`jZn>lR?MAb|a7LSg6SjS8+~Jj2A9k2P^EPP3%#) zwRN#J5hCF+RQ?$~s{;t3#2dfD# z&ihAf5Yf}q)2(XcI##~*iWRez)(C#jHcu!#NJB59KueMnty#vt8L2-?@v&upt)@bKQZ6e18hmp35o?c z0*!J1N_zm|neZhKI{Un$6q}63{`Gj6ij8cQktzO-4%Gd7X;J%NZ}XfMrMI`&SUY(6 z*h~L|Lv@{y#^)%mKv9T=Yirze-0;4cf;y1#^k|+&oZ&}6aB9ohiRc){!JsYyl$m?Y z;ZkyDs9p|ftF@a~V4!8@ABmfx5$RdcgDg)Xif%}>ey6=!fjtx6)o)nB3GG38V4gao zP4I1WC!|tnQ_jn!*j#Y1ZOC1hlhOu8QCXGP0Swqu4H6vF-ku{lU_ujK@(BVsZC$|{ zaAZ^d&Qk1#PDz)FE`Mb$gHBw(|6w@G-XcM~rPk<8Ap1x|#PoROS{7%r--DH+9h~|a z5#^^j@wMRF1OTT5Q$D|E-Zu$b?>Q>*ATOfN)K#uGK^%` zf)?`Q1QZxVI>Q_B)wb`AK#jtCny%;N+BqjGGl`we&eAM7qWj>mViqFbP zQLJA3lD}=S!YfaBw2cY})!fJb-m5@DTzJck$<~1iF$>jqY4?-)kDMwDS`gx!u8!?2Av`)380U`I zHEg+DQ4aj$-0##E!c4`hxoP>lgoVOZkR!4qtu4fh;9Emx*osX|Lu3TP zkhLpu!)o0Bh||;>FXkIlK(7lxvcLW!Edsl!4F>q)9=j#2@WINaS;YIVBpyGt`NT+LO8kPLIo^g}5fr2m_!+F-8fE4Cf`3f~l3Kc8 zAgFb~K;Yb{ACNLnZ~mC>>QG$wBLA+8rhqBqGhME(#>X)5iJ`J6!Anm!{i-F%9D zdGP1MGqFgU>*SIy%zPxcHH#3`db-Wc!h+;koz=O(Xq>V@pT)fnH9}wKc0w#hHBmzf z(F*0k&fF1eM6&aJiP?o^qk|DcgBr9|j$yHZ``MgdQ}>D3GSJtf0fnj|(XI7aC&ut- z-@t)r*YI_Dl31)w;_9|bRbkDmoKZo@p>CcL57&xhH$XM05bhCIUhm=P*ah^Qe+?#c z7pgY<>bHu(oc|G^5^YuTT#eq$3|<_-OBf)aTEkp~>)mT`>aV7uf$lPw!|2jCX7G#G ztafOC43xwPwy0f;9wsg;2AaG^Sk0d?oEDMID^=nnadmqolKo zE@c&n4MHpB)%JRvP>Q9KXO*XG(G>>*n8O!a99rn22cf@a+o+$UA?c}`4*EQMP#s4n zyfKXaDQ4rEeSr;?;WNALtvG4LA3e$Ke7X9(@O**uf;Xw3PnrFp2fG_BEa5-a2Y(ro z=Gu>@_%Jlcu67y3z9n?ma99_&l+Ue->M}ZPMuckw9PrmWwhwgux^mE}mxf{&eMq}! zNd$8fD3AN1U)&?))GCdrgcudC2d>bHVrh_~>trXz{`S2^O(C`3#bcCQI?-yD=cjJB z-PbTs0+nutp6+mcxe%mZ2AVD0ge#l7{niAA_Ps|!M|$M95k^v-#=Z}6-^q>8^wkVQ zM=kAk1{h3*zX)h#LUs7=I!~I*G(7rCv6{2iDs;@>7_<|$o0I*nG~6- z_~3dL%%FE@@gs9UJcB-*ot+cKXdzGbn!Z6XO3IpZx)BbjgxEEgVfb8>=mSn+kQbkq4l4`!=R*tA|2+}sIXvo_F6XhL;&fA7I~S#o8d@*4|; ztC8l5XE02h-e#WKwTW+bXMC~D)u>pgW;B3}v9#_1@emGvV6R`k!1w(uds8qN^+j)(Dt^B&6PKVkQYv zFie40(GDWbx|gD)xh8XHXow#%&G^e=InQXElKdu8G$%QAIK1mNrezp=i#Rz}ou$83YOs7teYN@fE4ir7x8(Vm9>qcG4&_p!y z`0U(Yz(-Fsd+vPTVz!W?8E5{s7&<#2U_MfZmUP=3T84IsrApybH;RpBU)Gw~9UO`+uVgOOzO+XVY}^Bi$q!DI0#n z78eiCp1%a-J(Sc0zoUepNkN1`!f0sV47|sXIFR$mKL-7d7H2^c#m9Y-%cJI5wB<>- zc#B0ohh9_UdWhxO>O+W0mwo84W#Y8!&-tl#U6jB5D~XytWDbgWWi= z>CL820v$!%;mbJ#zg=NoHbWwB5R)ZbJc}~WVa%6e=p5i+)R0;}GFV-5HPVja0zWkQ^a2J7d?t3O zL>ET-DKHsm*;V8%M`0pnnyMBEE7u7UY9+hdi6^KVp0fDXGLn7qbs_*FTaL3y2WvAork>R9r9GJHKJM z>7SvUjC%8ibyuq)g+`NxG>Miqt*d~W=u7rV<03P`(Ap}#4+VpY#ZsA_uRuf3uU4$k zX~V4bSiLgr^V|1Vk5i`|kw{FYod$tH6YW`bdk$u$s$r|@4YpX|dUV&+2Z+A|??3d& zhMh7Q+k`ZH2Ge6_J-SUpt8YVJ>b_f3jq0O|dA>9-(uiV09288HsAidj5{0lmJf91Q zK3FNg<5~=I&P`)&RAy9dD4;Z7#`AFAnp8D1+dbqX+}uVfN2BrEq{Zn%GWrd1zQq}i z;z>>vwkD2aiNl#3Fv$80B7Zj%1V7=SBNPUWR%J2XB zWllV~OC-{>!U}B9=PbM`l~T<{%cOK4B5$4ofzv?4K&#a`Hcr>;^yGuBVn(_SSFw~`n8}YVGbBC8IAO4R_WsU`qYBk!$X9gm17;JB9)Rr>J z^GE!mDt~W&A~d%f0>;)e@XcKA(oPfEp7qn8)Dp@HPq35oXjwAs)PMBK>WU)i{{_HNFhl88bv1>)$=FuumDSSe zvWc~l!Kn=9;jOp=43O|q^?%20YJ2q4v3&!Iv@ywC?*&#pGMP5_Wl4oFO zZX|pS-N=q=Uf&V&EPMBvk2h0Ivz%bJSSX+Ck8QrGfx%K}Q$TNdYWOt6!-n(;4M9%6 zWQ>|ew@oNVb_>YPm!*_8Tn69W7R5z798B8?>W1mXTJEslBDAwIZhn8WWFJ4o8Z3En7WZ zS2EVM){4+q=hSlrJFIKHKlNt@xgLPh6UrH)x%af;7_4SJrWG`O{P)|cPbU5?&SxP^ z^Rw1`Kb!rbnocOVH6od3{uAE}yZGr7#pAkR>|4?mzFiqQHE^^p>11kbfk;<&%S7YH zx8FY^J=7_F{Ce(xpr3va%~>hMI}UYjKaXxk+bG_n#J{Q|PejLP{c?!0#!Fp_Iwrs! zJ>2Nz$yw}(hYEkL6L{^wjfDJhh?wn<#=!^GFjZo zRHW*HT(m+cy9Q~mB*9X?Kbx7l_`b;Sxc;PZ%nw>JNI0Y0`ajhTU#$GoV9&%;=X}_> z?7SIfc~Pod^))ZfPr4sQC8^k+dW&oRopt1`2{NH}Y`aO7bRJGUPL?)ciwS*ql!icB z2sSUR0!wv?$Cpy_CTr>z{yyI@*+b9wp6rrIom4z(rcU<$I)IeV4NK8jteM7+2Zl|Y zMiD`R7eS*L1cMtj3iYd}uAFNk*v39faaaCwNo!(tOg5@&F!6C#L4N9f(H7z9fFyaf zo6COF1jki86tOtGD>FkNZyue@H05^IcpfWx z5ldO`W&wo*Cjf%r>oYZ~tXg2UH#6u%H{&23iXg2tNdD3M;46XfynafeJT=i6;*r06 z;%N3sxx*=WcBT3^hD=_tof8#LyB5dPP7_H5mcfp}neM0ak3q54^}$UeSNxe2A6m5& zHFK7RhM7r1Pd2hajCRs7xl}DbD6T)bf;r&wh2$82I_$oM5ldeiv>+U0SE^#GHZvH* z4<*PvIOGj#8GW_7R8Z`&*GC!eY)Sk(y=MqY4sxgmpWaX8}jY2AKqJJe4tIAcv9i${S>gPympA+%}TX(-CgfL&#?!HFTrh;*E53WNwyylInTuFTVYT<4rEZ z{HNwqM4n-g`Ib&Zro8L`vdr3=k0k7Wn;eWOrd_fXl?(O5D#tXUPMixx{!tog$$nJv z!f^ZKk&(M-OYcw}oT2;@IUL?@Ag3^L2NtYeA=GpW52X>`l{w!1L?_EP!IrN-O~CI- z_(L_w0z2TcjNx3(AkKp2yWRr}?CDh6q~}^296hUh0AUc7kCNDElXhJRUzd!1%DnPP zOdX$LVn70M8-B--7w>h9hL0+;hl;IX+dv9?py%|?zU@;@1mPjnZljeIm7)(n`pO`_ z5$_~TMqemLZ|%;Z8`)E9HS1x3iJT8j=}6z2ioo@#Q>=2jV1eNe{x0Pfe1W_NtDh6< zHt7nEs58D9!VwHI5N_=Ll&=i`9;7;*FIZNrQgJ#kLbnM&gynT)DRAd4I5G8A=~4&M zE0J6pCFL>DLGrk)R@@6h^DafK>~2nXdfd-uM_v9puy--Ym~*OVJ_PRGJ_!YB z5>gDuClj#mMw`*xBLWp`aB>6faXQO>x3X`%<&qLV0YDshbFvA&EAj0a{=ct(a9F>6 z<=27Z3Atpb%@%La*s4eTq;3MoMxdQL1;3SW_+_Y{#E`5+WZJL%b~NfoVeFYiIAfu- zvJ?Z!A^L+eGI=2Xl6_)>9pPBQdGm)=UJt{sp2UA^gPokB?~bS$!{SFZN-*z>gOc9% zbgzYU%rlqa40z1r4=f9rp#-9_-d_j3Nz%P=VmP_q^NX4xA-~Lk3(d^?Y40Ym)G9s= z5AFxhqUHIWLH%XjN*phBj74#||0(imbA#ft1UEzr*D`s>3z_*7+6ChjQzgfokrACs zZDqntwwq5x8Y6MLJp(S7 zLhRNZ_C?kqIk^|!9?6>`oAxfCOH|{4T}AwTcq6bZdS9FVPIb0^JZ}z4N=jZY-RP&; zis_$(b3r*Y7)|*l#BBxxze^M3{;e3E4Y@F^-Oi%qWUo~IUja`7u>JRVJXE|LiT`<` zIH*FPRkm7>IgvHb6dBd7*ROEOqVdKFV&2L8g<~@V^q#A(pkuJuxw__%!};||BO)S> zTPYe#6KPg&64A)J`DU#eak#>OZmFNOp+%q`m3W)xRHt5Q5@(oNoNQ1xmhQwvr3q$( zc^a}S3Hhywa8b&^p)kAZYeYoEiJ@qHb)K|@>n+PY@AWEQ3VI(1pW>U})vicOF0#YA{d0FE63d>3wg>AYq*t(TRB#q`G*LdVGW(=c_G9Ji{eD+%)(Dn` zm&Ee2`9(xToOq^qNn1o9C*d5P974R5P6Ta!8X2{@YMYew#JQmSlYBb7mXE)m@P}C! zT3=dd+H|E%vspTMF^iJx@WiuMD6~maJz^QGEiN_r0Owtdh=?P|eJbZn)(E+Y%1An> z_Ke9WbbFr@Re(|FvG9pTLMbWeV`PA=kM>1p?XykFdgYVenVQHIT*uW+*7yot4zfWy z67DN)aaYrluKOGjaTb;L=P$ivp4NqIhqE^sz>#x;a2`ePT%Qz>ju)~a-mdf0V7gNTU8Xk*q!Reuh!h=_>yh2jTv_4XXj6%*e_L`1{~gyOF! zw}?26h$Cuq2L92&|Bo7wF|aeRFs6PC0vZGD007i?$lve; zJ_0wSyhHiXt_ThJ)<)*O4*-OQ{%rrm78p@i`uhi4{Qu}h|H%B02L92&KN|Q)1OI5? zrv^ChbMOmta0uS#roPWF$cgxSAMm?-0Dug@0APo>EC9v;YQSRv2mnO1fQWlns~(ut zW)2QEg6!;8_G|{m)`mbfBWp``X9F8{4z~O30AVp_8v`RS(1F?zXbQ3tVce>$Wuyif zi!iG5DBM@DkpP;3WL)ilDz1vpj9kG+0>+GDqBm~{I}18n+E@Y|45*zgEv)PXokeKA zjV_32U)^S>5f!#GHW5^QB=rXc;+qJ~AG|;y5H<)Go3))OJBNUP0Q-GTc1})K1O=a?0@@qdfovQ=)>hP40~#1wJ35HaI68ui1x*Z0cnpn=c~}h%xQtmj zIE)Qg4UD-sSdF>3jQMyt_&H5D3~BzD-q`5J>^6>e7T@MJHev@_04;%54)zFbaIn*` ze`ost)SL(v{h0K(>PN_kpb?a?0~$C0A0aN$D-$CmVZG1&>`$|^aS8AXv;Pa7F#DA< zeqr?gEa(50wnT-EjRcLZc(=CuKD`Ri_J7aX79i2Tfa>pJBJO@~AjU^H-}UR)h1q|d z`tQ2@A`jC zT|dz-&6H3 z8Sju$&{Gf*)3DLd-@V7o!c0od&c)8e$;iaabTtSPItIp#>o@Q*G4YwmiOHG%(q$un3b7}NirB@x+Q|IlgLDlU1r-e)lYgKK0G4w!^fzE#H8eu)U@=Bg2JNWlG3vBiZ2a~P0cN>ZSDO7gG0k3Uq@jx zvvczci%ZKZt2?`U`v-?d$0w&(av=ebzl-%lvVV~a7a`X*6cl6>^eefLu0aqNGA;`0 z9S$@+@u%npwzp|GUt!=s4Eda2f1Q>~d7Hq{uI~mR9rq0V&Xs82B>VRS^ZZ|u?1x}K z<$?jQkdY9^L&gP&0hUDZ&lwAjgHu+Ch_qr3*-bf{QEYv&N$jUm<+f^PA{}y1N!Z1< zDWJ`fhk63Nj+cPb6aPzqIL{^@rS0pB*gm@T{yX|&04b>8zAeF$Vk(Q%K*D-eun^8e zf_r;%N0qB*wOkF*nMiKLK-P$X#F~STffLMdAMKuVbfukK?eal(ORMaSh1x>A@j@2) zL%tKgbfZfEEB`cQF+{#PV#7+=!$;nwD#cj&bB(0MbXah8P-^PT^Gkqs+G%b%G^Bsq zpqFB5hBoX8^nSz+G587)k4`z7H#7S=Vvp$gGr^@_8| z6U^13D)ga)#ob8d!T0wh?M;K-@RBSkBxk%wNB>|ZxGUUb;> znk=$oQrPHI+ss(CEqi@_J`3B2M{r;z`=qo#*-*38votH$XQ$F{EQ(7*EItn!alF)+ z1V!?GTI%f}^*QHKT2plz*wmY+QcYeus@)TYz)2u-mw?X^dzS#DfpfEeo%o2Y|4DN0y4_Znv>%&ljZ`! zea-P%zmnYaPQ7q|>z=G(Ms?I#WPD^8x_44(?c{mYdEdO)c1MN!1y*VNF?Rf%^j}R> z`BZv1<4Di$5L%`R4b3HUfewcQc*EB)dxCavuIJN_mM{gf!7w^H#wM)( zg)!(a!d@|^|3B%%4kz*Y@4Lv|J^kw}|NC7)h`8BD#Lf5YS3T?}TB?1OB+!TMeTy^9 zzc3E`7HA*1zjq)(1X};k4tGzk0`sba!GPFzqy0he&~r+{b_v-2?>kf?to*;!LGRdv zg6o@?q3P}9+9w2O4{z2iz#pC_Q+~@%rsrJP9}(H<%1_yk`=Jf@SK{|Mb)nOomw-UG zWPA^+QpY3qU7U=k>sNWv`x5XM3aaf+LDLJY$oONd+Bw}7Nh|G8-4GSD;SYupUXSp};A0ck-}=u_W(a@!&y~TN{#%2Q{ENY$4IIDl z<`(EAxZ*$UM_u@(j{FIxzRCNo zApfS0{0se$y7OxRM~t6*kWu|D!hV4-KMN(o+kU}CZq@i6=DFYVL;v1YJmMnETmBQ? za6=ndSAM{#pX5}3AQcQmuxS4aQu&GAswc0IO~)^IgBDI=|1WssFWrw^5k*js{mQ(5 zii^OS)juF0!X19?51v>?sM8&h55*6(biaB37qOX${a=CVFZdCH$eyaZ-wMEYpmoLm z^S`qHOXuIRZ~dRM|C57%i~au+{{B1c|I)d7viz);%ar67X_{U!mmu`KcbG*VxPL8F8=+{WXbn-As7Xy*Z zjB=X*l(ZyIBioSp3b5|~T*H51@!xQezZmGqHPt#}RL4Bh)q%^)#pG5O<~=o4+i-)B zy?gUkBqUf|;nY-GnG4@4-gl3__cxFJH2`!>V=J_`f>X(uL9?sK01~Ve<%%N7g3Vh1^xxDqd+G7O)f)zE=X?vc|gvw5DcW z0!9L+PLXmw#b+y42E*kbk&sjJ{#4>;w!y%mnv0&KO8{`|1h94qI5;4JdxFQ=8RWqN zCLcYeNh3@|02B(&&~-!!qQlDv2YoN+vEGhe z!g(T=C%}W5UEve6Emo#(2)3}dd?!ywz-8xvU+4zmxNdd%je^64~Q17w1#JwTn zbY*Mw_6g}tn(5gjK@{Jde2+_jyZ9xbIb$(4r75L}sf8}Is^2A4mVr;m5;Nv5z~++; zx{}shz;kWL_&(E+DxP0p_K6Ez%%$u2?HHU;-AA(GBuvs2$`>J4S;B*IW~DDix?o|o zsa~gr<3BTefSK)jx;x6?oojqwZuc=B*w(VLL+54L$+P>ryNY&7sahaXOYe=Lg`jw_ zrK59wj;Rl-bWFf>B~k<}V{Wztk*|XcPdd*VZVypb#m8IK^3QIIN?{u#+fKUpS?o#1g>Go0i+yBl#YXx`V1fv5X{Zj}Q`m-Vp@u>ag~mg0s` z$5=E5Yc|`o_E>6}vz8K%&ZAI5yVQ1c)S&D9O%8MN1NC$oW7ka2WE+_~r}hR?r!E2D zY?+9NzDaoqMU}igCzCAaC+yX77^Wk&l?C>wXp!_pU~P8j`B44p7`)Va*NLCe0}3aE z_|a@1q(pOsHn-`5*HQx>+TKT@X`a+ym0^kHh_j>mY!-41ZmB>EM9JpVI5yXK6mVbf zwq#h)sPJrMQBkSis&?AOto++>HBD83%e5sl#&l#xl9jM$Jl0rdg6AP^Im=O2DLdEl zix-mY@zK*zUo~M$#UB*vrHQEM#z$QOXuE`s+uUn$d2TX1IFwJ;9_?bXC!0u=(Xbr~ zAt9(1G^IuE-`C)2RaV-VkXEWjVGlnPLN6H|5h_(+*qq=9peIaG_kc+cIFr*#Q1 zebe}GpiS>C^>QUgfSY0Vej-rc72&BmVy%0uN{{_;-cqs->X+39EmGk~3InZ|Zsfe^ z6blsve>aeYi_%-(Xl4FC;rY8G^+P*%~Mm`RACF+%JrP? zhh754BF6>Hw^l9zC6|D(vmU;_b@wMFQ*Py=BGI#X}bR$f*&eWE`isYCu?_a&un)RF|UpPPm4Q6-a^R#<)_eSaK zDgoeOZT>M-zVyrvzhXBlQLpIUYVNB&6BL^223Pq&{1E&}AgHI*zc;i2PfcpQ^Wo%wDNgK7IEivR!Ddh2z8xmz4 ziLK2@$Js-SOgxAFc`4?m>s@48xsn}nzQ?e|%;ZV!^*cs|19YV}qr~)4E=a^Z#1zuP z`fGiX0Q{$t0D>=|IF{{2uh}VLt+gn4WXiZ`HoiZ>!n#f6y}Tl%mxkD!7(Mwpn|^>f zcY*8`t)s@+7i$uO>j%sZ{SM18Z6WWE1g}Su(wStsG5C)NMiE1PANKgmphr zC0^3W7%twD%yJ8YK`OeS&>}C;ZqE(g@_O9O&9qP0;Cgk!5Ri4Ew4uY;1^+7-lWt?7 zn6RbmIGkCpxvt}|K&%?jkdqVq0G&JR=YFoW7tURmfKQ~yG&M(my+Mb~+}m&oz+6N; zk$INx#3!7O?u)IDI2~4?l`nV;!1QJJ^puMRnbl zVC_6h{(uTp#pJq++@aD-r3`LpW*V{`cx`I@9=iYDafT(0VMP6;Q0Yt!x+#4^wUhW~ zBkK}S7<{s3dkJ`j2Mwe$rP>>wy98XLLp;=WtQKDame$T{r(?iJr}KrtN`c! z(c+0eM06Cf65FOx+DVZmdDFPUeX^HG-aUWoIdZ+IPjJS_B_KW*QC~a}BY-XezZpWV zT#x)1k!>0dBl^so`gB&+MJ?W9)rE63k%aW1kjF52tXtgHqx?4ac*LCr_kuC>o@PAP`MyB8-J z`~5Ew**>$Vo6O2SFp-*4Je!@&Iq;lgrlh(gpv{)9PaNk|IE<;VOs6w{ z_W??bvGI&}8@}LiI6Z;T#Mt89G#)n!$RWZQzN;*%3iXg= z*(~|mVPSwa*cF&Fze$I@P6i@D87_|WFVc~CqAet!PBLERCsh)D=R@iwZhJf4!~4!^ z!q?nLDcqIM9=qoYLN_!o0p(Qli08W>t#Ys!@p9xy-kA2dLbMOFHA{rOG}inzTk@<| zRMdF9`K>4cezm;0MwTyzRmL%vIQuXO1g;PFu_q{$jy?x!)+HMxtih< zmmJGvnMnas>a9@xYbd_Rj4#RFNrFhfmJ2al0#dCzpXU|#$p0A%W`8!oas9%QsbITt zNdvlBuw{ydl_jt=1lbfcN|UKSJw1nx-d`T5GJC&R$GWxT{w2WJoNzdob*L(nj4qfM zGXC)81N&EDbvIjS-h*e8*;E;!dj%H~5rpL{RItKJfSnk^^#gxt+HTCTGR+Q~6xV=d zEtfn6)Q*&5DcnbH)K=;T`ply(;|NdteLM#yNV{9cEgHP7^0GaYt?8!gp78OA(-5k8 zZgn>9I2$?4p)+-G3BV@L8(*z0HigeaL#|enezfM@RcBRZ%8Q(AYE7$a&V*aqUC7zP zX#sv!5iA)1z!E<)Ll*2fRl3S=Xu86BzcQleEhPzVV|!K;35moVB-sX}u|eh2W~TA> z$5tGQQzHkT5$kQg3BpFOu25covA>Am-A%TXh;z+x7v4g#cka1-$4@rt2&O4t$ItL9 zP_@VeR%IdcMA#ZQ%I|@m+D5od)0{3?Ev+IHMq3x zMW)yh?RoHV-=B?XJDyVz| zjV!^$m;^traL_FYx_Fvg`U0=~ttNJ#b0zHR=`oKN8o=Tp8Q~RLGvjuB<2feG00(OQ z!^Ab>INcYf2D?%#+V+`$I@d2==HKZ0_-L5dW|FxlO*=YM^~O}y8vw+Vn4HoVWp5db z{%ogF*2;=ozS8ZJR*wazR%;U7h^VYb<4f@deWd#5yBMjY$0_}b&|%L7?;OY_;J4mo zH%UI6!{b4@xw$~2NnKr0`jnWOz)ww*k#5hM1Rfqgy+xtv940@2+E}BT>|#NGmo+(v zNFT{D@T;Xq`8+cRvB0v~;c>RdQtH7ea)8>B{h#XpX$KCY*$Fb`LACboMd{Fov-e10 z&wT9Sou!%Y%3{>dXl!3!H*e0&)i6szt#Jt`MS1hNq$G4!y6)tS%uqBkEh8}rWkTez zEng`Y6^p_p;5UXSJK96}}52rMZL1<}`a7;-D08^ww09;YqrYqeZ9n@;(SqcOuUdto@A`-1ISYau9fur(!H)D%c;A0ChTCf zMF*Ma@mzSH%+vC>OrLfJ9z{}N^AnU$F)u@sW}=Ky2lrskScAcJf z!!MnyqAY#;J&Zl&p+?+dW|D;^5z8lfd%bVM-zdJ=sXNNh+m6(3$~C`kZ);v5ne)-w zJyK3~Vo}&Dji37Ua{#C8R>;Ff!>C#=Yz?U1$j8y&#$?CXaiwJ06SYN|=#6{khGiuY zBzV$iuR;bneb!|Fhdi{-sZx@I8k5GL&@4VTL;HnFBQpR_G~KJ+r8q$^`8DF4t41z^@Sb@*Y%M7}2gVDXAtP&hhc3Av#J5 z7wpY!{!P6Y_mENAzTZ{X=_$RTgWy}R(PO(UrIMm}x!@;w6QjcGW8*IYnkwY_N15ud zh~fmv3N8{g`zHJhX`&uy;O+`o zjK?;ROdF*M%%Q0<)UuAZF9dEFrTyJ!JbSIrRnow)DKiVsHAk@~amd=!&zoq#^zN>VP+Hig z*F%C$mIuTd>u_AX-!@i1`*33Pb?s+J{cJ5R?kM_OTYA{ipSq~sN;<;M=tQyN3@D@G zr%f4OO4WM5c53s{P}Vp?s#H5!!*c%JhmR$h2G0%{Q=eaRMV4RVk6$!g@IgE`{U#M5 z4hp>CdEd(|aDeWeLvn-e$!9knUcVs;LboQ4+|fhanM~d12nAV6J|*nMXfvlDrg6q25?a_>LiMwi>at?>=4$9 z#m`wGVwSHsXzOpjo-0zk6ZDxrFfuB_PSJ57sfU|s@>vESaE|P)N*ytMo&>h7PITTQ z6A^sl*%XbKN2=pKiG&;0s~ay6yLP|v$FgeqruZG}xgE9;qT5NFk`(>>niSHV_y-M6 zB4AfId_+Dk>gY+Veu+0kmUbWcG_DR?cJ>>{Kgzq?w9oU~P!bm3LF?~mC?#^08yA^} z+#18Mau^FYi&6s!HLB`aU8ntI$mR0zmi4ScX$6-ky@8g2S{{~2 zf1AS^%_#-)p;%zPQ*s~eY|;8$JfTcYL+nb8#FsPjpP60&=O#3y(BX~+{j=eY+1xop`vx%7CNg2{dIvPtqD?ZhM$PcrUdiJDM5E_uDqCr&Li z`mdnT+l)0rQp%{2)8x9+Vzoz{;VeidH>#0VWwO?SNzF>$HPLrQhI}*vxhJMRcgb%~ zMV%ChPDE^b-Uf&)YsAP8$@;P=7XHm2bF8fKmrD*uM)34f!wqgI*{o*ONzL8uc(vy# zXxZ)RnEAx~kdH4PCN6rCR6->8nGB7_hK#?iZDS-inLTS3`q4iE?YEDL;YUH-HwAZB zVXM1O>BBN~@Qb1zm5zUY6*6=q;a$U`A-b+JeEW>QK+BG=2dq{Pb!!M6(zcg)+;)J(10!BE-bvvRTCM+ZtMoE@peSY8C z{+i}p-R8GhvNN6cl>8-z7W)?Wth0(vtPSM-LCOL{=u=Yq36Hu(jS((3uX1=?vyQJn z5w!Go6=}=vIE7?1&obw-$yhcu*0^&%ND(_(_IZHZ(lVv2o+|8TEXvz!T3lX6q#{X> zonPq`*KJn%P_Xq?FA32E*Pv@aFs`5Ch~ZN&b!pANf%jpy$V@FTZ^~j_XRi;8Qrm?F zr%ou+HLzWr*x;QTY2}k0jo0h*&51<$kiW5(@l5%20lH|=M%nbc$EWnC(j&}>-C%5) zL&WKX-#jYH`H7b6oqVv9{_WUL584rDTpB_}{A+&;a+MQ;bJXD`NRL^tII|XRJR{l+4Lri!7ZwT$Cd?D_X_{)2%JtaYA-9-k>V(LV>hvJ;67Ya$M`J}#HB2>D4$mGkvM(L(C#yD4 za6Y<)ScuC#f60@3da87RR_)1td|ZAB$nn1fB=lE74-v6VN}^n0>Lrg*n|w&SZ; zCQEs^nV5qsi7p_Bk)>EgD2yeYzjEfa7sPmqfFh}!*iW~J-~n0y4?7}V@*zhkxvsh0 zDxa%Dadw85M)9Xod(P4xW?ULkQGNejs<5&q$Aj)wt;0+zKQ#YDkQ2lXlf!9uVv45> zQ2rQ@FRDa2v{SSNg`C1eV22~8Bj?@fa=qu`Gaa#{?Cbtr$^(*dhs4G{U|YJ9T~rQU zl3pz1baIbLG!CsJm|FJibw?e=IR!UDcx%*`=5CM?=ws5ts2>-Nr`mnAx!$m#aC0cB zylIl2JT%2c&?nvzwYuq3yd5sLUpkF!k<~*o;WPnd4B~7{buD=35aMJ?;YlqF!fsvr zVv5;$TISk%I89(g=Ex@G0^8h-r`rC@EoacV2qYzIct=}j zVp74%NaN)-g#-bLk8e=0UJA6)5|qwSaIQVuK6k2c7q!TA1F=oi+q@OzA`ca03OiO4 z7UdpE-Y#^0ckJ45#>pQCxt>uT^XT>F9V{ey1KH+noNNbD#hR#+>~zg0?7@OvxsFOv zvrv)gIdUWZtw*tvY+zOjI7HV_mfkv~UDsJ%tzzfd(Y5j9qKdEOd#~Sy;C#iR--)@{ z3vk>Duz%ug^hM?CP0E(1+wf1jD|)+UqLs9x3-}pTPfoJz>Mn)@A9^+j16-MdNhK|9 z)9VhEWkr(Dod|myr>nUCx`R6dLI48PrX2~NKoF7G;pYsjCd47HMC8KNkZYJ^ zsw_%Hxy!dNs^3|&8q2W7S*G(eng#9P7KPV^D9*$Mwve}=zd2Xpd$ZIR^eQQ9_;BaB z3}OQZFZ}CzI|n>4^o2wVMS0>;kerjY-jMs(*ih)m0o>$fkLQ7p9^sdWR?DuyrV@YB z)ASf@Zx6v+&pSb0iZ$wK9#&PTl3bkwAQ+_h00D%D4y1%EzMA1#_HHqS;)jU+ttS~B6! zG zG8IPGwG9Ht4xNi+j_a-sZ?EKX^TCn>_xUI-3`l72U&r?x^Fkt{{6PD;hhSLD&s~fn zAhG})We#iN3!&S95I+h#^DcZjIblBU8u-3DlVG8;@FC-qf^-JjzSE0=wf@3@CG;-q z6-~I869jSi(1*Vk-`QGi&|TWi(G^r8U7&|h4}(=|yo zaG=1TR>jVp3B^Bk=qvg>5unWBV4^d%Iww&b+$r6q^K!VT&=R$EFsqXYqhEqOt`ew9 z_VN7^3Q`;Gr%c<{(8hws)tw3-b(ME@`_!i@szCfOZK&R-*yLPj?~uIi!wPO5!k6q)HAM>HSgz`-pMN+gD(M5=q4Mx@S451q--^(V{3M1 zp}FTuiPhSYWv|-}&Zt5aA>QM}yL^a^TTheH-h)aihG+dzkpAMa=s_i3_Wf2<&VWYw z^PGgI4IAhvrqzxwsCQ6Hyc2Zw2>o0>6-I0dS@SbL&d*U4jIk4_Z52t z!@D@}G)%q(lv+|+p=JzJcH$s`In#!G-FcSr3@n*46$-Bw&jBMU^)~c`_8Jbh`4Q~{auF;@cjS$1mb|p1M8XfFbJvb;Ysze|k_K2~O06^+ zPV%sc>p#FsGRpl#Qv}>03<2{b*L+SN)ts1Q`oNl6{wP#o9FQTy+Cz?AoT}NLl%26+ zT`@I(qepKo_ax@%ZBb>lyz=&WM2L0Jz!NUTv6o+cuB-4f#%W5S3-?XC33Z9pYdJ+{ zjEZD8y{8!+njn`gGI9+!+Kn5nKe!g}F?+!#hHVbZ32`yagaYe!I|#D-OKzkKY2-MC zc@3(5C|*-7uB;ej%VM?6mU9Uu%X9zKnte9@l2(ilnUNN~=APSmOvwOZ$$+DJKp3us zb{sb*RT=t)xH~oVd3MRW#~piGI2_1So9`lT?p^{0I5yOal~7l4b&5z;Q$L#C%n7r` zB*8b<9*=yHD$IaWYZ0}^R;6SfoWL8`yGjVF9xV-;z1~3cimYZ@N&=eM%qe)L7Mpw# z_bF7wdyq&TKM+3<>(v**iv|8=Y1=`y8d#RcV#O3<+so^uKubw+4H4+Cj%bO#ROl>5 zf7a8UY*^@Ey_j#UeAOH>Ar?Igwfh;$NzBIkVKsj%;jd*$-tc6yZOrd>t*WAhUDRbpI z)J#c;xZBB;zePk)#gS3KzIdwa{WI0z`+XM0xmd^k5B%mNLl>9XGHJ&ookQCes&)zr z+Gqhwi_f=!bjAnMW1b_=wvYVxuWQSL$12|($d|8gECxH!fD%2@o@azsz9-M4a`tpa z?^Rd~WEoaZnQdB#DdM%?df0CoAv0FvWc=!4%KRgCJjB5&@r-*9M)b0?Qu8w-YM6+6 z0>Yl!Ih)Zsh_ZVLxL*Q?j-13fyA!34JzqJk?h0HOuE!*e|S* zgq=_ZD~ef7Dv#EndzcKHHc`61IcB7dq-Fiawbv}A?y>5}-C;@^5w)<(IZ~ze26)y5 z1o6|PX&sAcymF{UoIjJPg!swtmksP!KOXBK?Xm+(%M!{AMFOrR`#!M^@!L{qsv!?m z_Y;B2yWp{lgjgHV8;w=Ekjyyk#eG;zU!~;fx1{dh+{k6w+&^1ODRuk0Ine%^#cIJH z%Pa7MaDZtpfqAkHUhvWq+=5gQ?)pKElmPxJ9aPaBJu~JjK`^K;=(K3qxfaH_;HOX*3L9w@1K-qMhwP_0AVz8U zFlp?^0o%$A&l%wuQTH~pLbGUr`98^ zf2yVuvqY&@D<&d#OICMnaIT1gS*LeHSO~)4%e}kegtrpOo8N^VRrjI2i;UzN0fX?Z z&g>pV=H%_T5XTf}$zE2{c)1k4r!-DVmb{dQdVb z1q}7uSEa;JY{V(nVz##e4TtAOC^rYzF_U!UaT#>r7BZUdlU^iu=g8-*wd`Y7rPOt6 zp(lBAT|5_{)M;a9l?Ou`Y*j3dH+eQ9Wd_(-QXvt%sBOMrwqZsrg8be9J9LsR%9}&1 zx!J|cfr6(iwB>_%@;YM5yoGNT%l2qPbbt?}@PV4&EV;bjLoT0wY^_k`D`T5st}Kr) z2#v!~AuA{p{&4cdvW@z7D}bYp*Y{1ako;iYaM2sf%}pbxeBO~1Gd7B6rSEkTrPS*f zH*sIe(0MXzDrOmvX=TDo*A@>6L)Em+G`73nS3rDWr~~r@S}t@Srz3W9Vz@#f!U2jJ z2h?~-j3@`f-YJo@+IlySp$cXF#ZN&-7Q;s+rYCCVq?Dq6gVhwY^-n572()t zwB0V3@N~+q1c=>!5-Z8DadZNj>f|mx7=aTn3X6Pp4sIxoQk|cq3f)>?Qob!ouy5Du z3F@0;+AW)uL8pJi-|bR&&vE*u>C@u-av@{I2XSd8G!K+v@*kh}a|LPW-;xWk@hDso zGe6^vKFn7ARJ1!gW#hiyLWrilq+kBDhYsgchV^VbPKy!!demZ6Nxs6otdLGKE**Tv zVw$g1>jf+kBCoesdlEFYXg^8PN8y+W9_zs|k5GY)6_CYBKM!3;vp~~$*FnwXwA+=p zT}5fj`lhN{b`Pb#$e!4zv?b zRuigC>0&vJKr}exT2&>k5rtHT&j^Dr!ZNC(n^+_(f(5DjVwceA0w@L2leZO9v4R|` zIWf&PvWgZ2G|3YH0a6hR-ss2(`TSrOxd{u!~!{`K53 z@j1Bf>!{w>2`!HxxAd*gRZ>AX_YzUHNs!-ig-UU3X)z4}SqUpIV5ircG!I>0NQrE| z$^>uB-c-n<8(?E&Wu46{jgx^X@uIsZOWp1CS^^?3G6KQ^hJ>uq*A%kM?8mi}p6K90 zvR^TUhP5#Fkm79Na4K_heZetbPukJ*H7Il|cidoQ4K=bF;F&ide8Typ#D`}yMxM_XI}~+09h#;)0(I()=%1I}Nad0x3*gy^gP#}5Xki28c9ZIHqs9@F z@}>rz%Hb@vI!VE;Q8PtK$Fhh_gVORzVkWc9didTQ`L<2gnojSJc}o^q^8ovoA4T}r zbh@f1ipMEEk{eZ;$|E}i8`z$`YoINo_F9&FqJ(dTH#V+BSe{bFn-OeFGtsO@U|pfH zbOXoGb@-_zL$+O2UyJVXLo!x3MIuVXvC!9%3Wa?M`Tq08P}aU+Arr@Db#lLQk5r|L z;N(kyfwSP8g8WS_p~!*RGrGsi1f_znBTbbB^LR$I%}*`Yoq9~uw8rVbnv|NQsNF_A zYr6l!0@5OPTWuieEiec^ln8=%=M>&Udp_6E{o+uZ%yqHI(OgHza&79oZ6UB|<5YWB zKn%a$W7d+PPHBd@&8T>AHp&gNw8%(UT$>Ju|MPqhv0vZzP;6lMzL(NAv$I1RRgc}B z!UxB~_jZ9MqE!L5+JZsF$tyR=)CRNG#g(VWyYm;s0r4M#INP~arL#q+o(*imdk(eN zK=2`w2pl$`wE!Athu0obNb6jPN)MYneQM9?GH=cSyf*WrD|R#lnCl!myT}@%JDF6n zQAV*!9eBM?*u7nvf8{yU*PRcX3?j^1jmIM0d-^(zezqZ1z-dxOzw5rySXdV%Qk1rL zeTH*lP0$_JbGoWj<`cetcALltZ_(GUWQpDuk!)I8ejeUmVXRU(?4utCrs}$g$K*}# zirnPyP8edFIAunbPgiOdv>eW#`MQyneLnhP48$zenTQdVSgI0)Pt_4H#Hu)^HX!^o z&D_-~6qY3z_}Xd4Ac7x8Ld$6c{m^~`mr=EiSeSgM3$t0!q)-SZYYzgaVSb#EC#+E6 z_Qwy1{<3Z3bbBDkg+H5N#KC)*NY+xh&5?mbo7N`Ic23M*sKS0AS*ezwbp&z(eRq2L zB49RgTPhXE?qe~F`&_dHh?G`*|TL*ArDK2>BU=-%0zwr+*V-@ zPlWsRU`bEA=7j?}y)`+B3`}$!E7s(q z%$x01_G7K1F#5pZM-xG|Y*f&y)1=XsAK)_T`KFtrWVl zYvR*j@-`#tL}vb0PZRZ6&(K8mTYFH9Vg?6PNf?vrTG

D0U4kq5sul6rU7A8cV=^_nU*EhqC# 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

NNe3O}DaeyK~987>$3 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

h;6agOdoeAy>9@su82eMOk0H#JJ9pXjC4{vTdc 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 bw8BLw7PWCA-*5cShyVZICij2^{+s<@l8X>l literal 0 HcmV?d00001 diff --git a/docs/images/img-planish.png b/docs/images/img-planish.png new file mode 100644 index 0000000000000000000000000000000000000000..84f32d2caf295bfbc0420933c6b9e1666bdd5f34 GIT binary patch literal 21669 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-point-unit.jpg b/docs/images/img-point-unit.jpg new file mode 100644 index 0000000000000000000000000000000000000000..476af715c119e9fe5ae5fca54d5ba1746f37141a GIT binary patch literal 18035 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 U3w8Ks0r}ti|I%yp5W@KX081WK4*&oF literal 0 HcmV?d00001 diff --git a/docs/images/img-polyline.png b/docs/images/img-polyline.png new file mode 100644 index 0000000000000000000000000000000000000000..ac5817df1a33b531b2dc1f224b0988bf349dc933 GIT binary patch literal 9656 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-posterize.png b/docs/images/img-posterize.png new file mode 100644 index 0000000000000000000000000000000000000000..0719c96fd775378db0f3769232e8a1a3ae3dd57c GIT binary patch literal 389374 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

ZTsJ!AP*>rziem#dQbV)8=lI|8&H&+^yiD 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

A zz)Mj)BMv?@aao<=+|NK}(j}lq-(nEnWJe66?n_$tOw*BNoGA(3DcJtIFs68wJC6GW zN5|8~M>a=st2Q%H_H#Hz?gDO4Mw@wUq2*+zeJ$13!kM`yjGiKbea(CvzwOurIr8Lc zdcrUXBihj}HQ&8}Mi9e$bVgzRf3%|1iQ}$dl3vZtuQG(Cxyr~iHv?;QU3BuhceyAp z=#tC;^iRBcF7QI_@GN9t#W6q zu=oO@|Ft~#q;`LS-wfoNJ{{W(=-E#Cj|)W|TT&^m}eRZiafnM*`Zs6nO*7oou(WBlL^gG^GmJ&(SCJoc^NtW_c> zI1Fr4;v+f?6{2kKkl_|XnyHYnz{4oG>-8%*Xw7X)0-(WMl?2G87J z&LJ+}^qpFBlWU;Y=4R3O=b=#c5gHdrG7(pM`rcNd9BIh<&V+mxnljx@ee&e@twolK zvP(;F#u~_T9Il!#C`+Ci$sCB>*v@$ZFESVA=~f#Y#F_ru2VJI`QW}Z$UYP!x`{Q?M z?hd})_xnJJsc(pUySb!!gTnvDIg^-PQ&yNmOF}n=qyk23$r4eOz zZTVQG;4+NkXL4XgE=gIyv+DBXk&rXer1fP<^<;BxXh*$`?U8wqIr;EZeAW1)(iD

@`#=vyuA%vIUkCYv(uvK}8;{Bk(GFEpD&!X! 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-quads.jpg b/docs/images/img-quads.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78dc73c705a9fb2fb3f4a1f641bf8da057b0d619 GIT binary patch literal 21741 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 F{{uQ|#xei^ literal 0 HcmV?d00001 diff --git a/docs/images/img-redact.jpg b/docs/images/img-redact.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea2d0eb0116681ddaccc754a4aec0d7944aeacc0 GIT binary patch literal 43354 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 R7Wo)YP;Fza*BZAT{vUP%9J~Mk literal 0 HcmV?d00001 diff --git a/docs/images/img-rendermode.jpg b/docs/images/img-rendermode.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50f00d320984b2218195fb17de5434988f8dbfb8 GIT binary patch literal 25864 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 JPDHLkV1nTp;Z^_u literal 0 HcmV?d00001 diff --git a/docs/images/img-rotate.png b/docs/images/img-rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..dcfcf5de2fbc19b54a2a3e64e92d4b956ddead81 GIT binary patch literal 10424 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-squiggly.png b/docs/images/img-squiggly.png new file mode 100644 index 0000000000000000000000000000000000000000..c485cc8525bf60fac91b622c526a460d9645a2a1 GIT binary patch literal 34483 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 I^?UaJ008NyBLDyZ literal 0 HcmV?d00001 diff --git a/docs/images/img-symbols.jpg b/docs/images/img-symbols.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4178a616f45ea8f729c00eb40b3997df789061c2 GIT binary patch literal 70456 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-textbox.jpg b/docs/images/img-textbox.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3617724235c7b835dfe3394dab118cfca26f865d GIT binary patch literal 36781 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-textboxtract.png b/docs/images/img-textboxtract.png new file mode 100644 index 0000000000000000000000000000000000000000..3ab3dfe03943880bc05e4cd12bdd4892a8ea7437 GIT binary patch literal 71029 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 mJJ-&3^ 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�SNM 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-textmethods.png b/docs/images/img-textmethods.png new file mode 100644 index 0000000000000000000000000000000000000000..12725208db0bf34bcde9782d6ebf657af972e7b5 GIT binary patch literal 5885 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 BoK*k- literal 0 HcmV?d00001 diff --git a/docs/images/img-textpage.png b/docs/images/img-textpage.png new file mode 100644 index 0000000000000000000000000000000000000000..c53148f1cbcde858d20c064ec8103479882a2ad4 GIT binary patch literal 90614 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-textperformance.png b/docs/images/img-textperformance.png new file mode 100644 index 0000000000000000000000000000000000000000..0b70dc893d364bbd68f63f75f142d03db35b4608 GIT binary patch literal 9398 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 F{{Z#*0Qvv` literal 0 HcmV?d00001 diff --git a/docs/images/mupdf-icons.jpg b/docs/images/mupdf-icons.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88e3137aad482325d3014b5fcbef0704ec5c3946 GIT binary patch literal 21563 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 z z+6+fmrbdsEaidKu%>evq7wMAO#j~7Uq$7xDW2nSa#uegoHT~$Nk?6d$+CyGxm#}8B zc_j+jYZMdLDx`!2!Cn@4s{c{Sng284_;Gwbb6+cRd~(cHd=jg)P?)1R8kVRzV&xt= zKYW@aL?e;&!-@~eT}T*GpS@Y3 zYY(69#=f_aLoiXBVpaQ);77X-FoU+%fT!#1zX2F`b#fs#&tWYpm)rhs0Rl5S;Li%|h# zPWG5w?=vm6nNt047p2?ZSH--~>I#GiVRad)#HHF+66jDM&+TjRkK;VC__q`xSF3GN zY-!`yD}Cq$(Ra-cxO@GWyN7Fzh`#K46Izr2{(t* zzLXlX7E;erJZ)Ur!uZPdy<2r*x9`L$pSE}Pv%GLh(sudAj=9pGSNWuVHIAUbsoK&lP~?(w>gvniLh;5bTP=;rJ; z+~nryQndxMoqgn*M&>7?pVriT{n-tgnKhd@81`X@sh>QfeZNx+3vn4+F8ZyysrWka zYt89bx$^LZ9i8ZFC$JaH)iP5Q(te&x7@3!43pX_cE*v6*suqGJM7z#)PzjjuG2z1` zwL7HlNK(>U0gI7|!3h{EnZIdpo4S7k0DO4N4CL<~*v z?|+?0AnLDZ`T9m|d!_$CU=wEhB{qkXbg;h}tqX^N=iqJjK)U|HQ!I zhNPxdm*QuJhIDQ@T9n)IrH6+b=GiHic=!+GcUda-B&g7BIFxV%7*ht(+`9-aXWT)r6Wee*WXoq zL;Bs2oYWmEJa#o8JAslYoyhRqhrU8krA@(}bZCS7*Y7jO+_r$94fQ03dJ9z%HbiY) zw_+o>ll7va77KRgH;F9ugIN#buahUq7EflMQ%rX=@iLws%;Rcy&AN5J-An9K1NbhY zrlFS>;7x>yFsPB9#)F@1&8$_10_emb>4wijC}(hL-5e~5&1Qt9Ll+KlEBcE-ccG1v zSjRABOzcLHH|CJ(+#DhHdfWS`Hc)}TM|GButo{x$VQx`;qf;ebbt18qEYtu71ub|d zrlUIcDGeCTWS+)wr4I^&I~gS9o#WiAQJz-2x5D_4@1)TK{gDGWzaL%hpWt1#;uzEC#a zW)$jLop;PH*eL3iMv+q)17%tB5k)6l7RlZBWl45Ixh1U7RZr!h8SCtZd9Q_-rnCnF z2gQ*&q?AG4WVY%<0*8vt%3v)xaU+(f5cK3eur|0<;^idSQ~Bt%;u?vzraTT$tN|i3 z5$UF?v*q*g`K6cxfWPL(a~66oHnHKiR3+sxy#`~F|W&dzzSG>h=^xUCwR&+EsPOIl~IA&vUXoIbMjTJnN|`O zr^0^IzPs5SEf4{ab_r?h(s=?ZjkjVI_a(CWUUEf{Eu{9T8>~%!v<-#NCG1ps8|dZR zlYCCHb>EQgUFcXU+JS-NO}e<{U58r3ME8y9WW(|~>}|w&YH=+l_@;hE9AAADw}CMXdv`Sv&+%+U^-9$J6umWJ|!)#9MRgd5V@7)rs0ckAb$;{x)KSUxfFw zW6P7wM7VZ~C8+L>#@-SnKSD1~wrg0QSElV>t@;Q*o-H-ZG5Gj--IS25m}DonNjd%{ z{BoGuO)H-YmPqewXU460=}D6S)`AOLAr1C2I!;$lyyp$nE=st4LaQTnY*7#=705F8 zjLhJK)W5OS-gMUiGC|zS;6vY#f>@wM%Xm%3KeKL9Hj7;f^@ieuHccK+&)ScGhHthM z{iMrjujQRo7O!J#FE-xaGKpa;S>@ZX<@yq|ChJ3^5GAtk=E4tpn#q$!>0Jd9ZpEln ztCvdxR@RC`!COT-z@Y@?zP&Pn;egbog%YURSQOFE*g5Wq0o9PHK_ZBJ(w%x39e}DJ~O@Zaf literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..dc7088e --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,22 @@ +**PyMuPDF Documentation** +================================= + +.. toctree:: + :maxdepth: 4 + + intro + installation + tutorial + faq + module + classes + algebra + lowlevel + glossary + vars + colors + app1 + app2 + app3 + app4 + changes diff --git a/docs/installation.rst b/docs/installation.rst new file mode 100644 index 0000000..8b0668a --- /dev/null +++ b/docs/installation.rst @@ -0,0 +1,64 @@ +Installation +============= +PyMuPDF can be installed from sources as follows or from wheels, see :ref:`InstallBinary`. + +.. _InstallSource: + +Option 1: Install from Sources +------------------------------- +This is a three-step process. + +Step 1: Download PyMuPDF +~~~~~~~~~~~~~~~~~~~~~~~~~ +Download the sources from https://pypi.org/project/PyMuPDF/#files and decompress them. + +Step 2: Download and Generate MuPDF +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Download *mupdf-x.xx.x-source.tar.gz* from `Mupdf `_ and unzip / decompress it. Make sure to download the (sub-) version for which PyMuPDF has stated its compatibility. + +.. note:: The latest MuPDF **development sources** are available on https://github.com/ArtifexSoftware/mupdf -- this is **not** what you want here. + + +**Applying any Changes and Hot Fixes to MuPDF Sources** + +On occasion, vital hot fixes or functional enhancements must be applied to MuPDF sources before it is generated. + +Any such files are contained in the *fitz* directory of the `PyMuPDF homepage `_ -- their names all start with an underscore *"_"*. Currently (v1.16.x), these files and their copy destinations are the following: + +* *_config.h* -- PyMuPDF's configuration to control the binary file size and the inclusion of MuPDF features, see next section. This file must renamed and replace MuPDF file */include/mupdf/fitz/config.h*. This file controls the size of the PyMuPDF binary by cutting away unneeded fonts from MuPDF. + +**Generate MuPDF** + +The MuPDF source includes generation procedures / makefiles for numerous platforms. For Windows platforms, Visual Studio solution and project definitions are provided. + +PyMuPDF's `homepage `_ contains additional details and hints. + +Step 3: Build / Setup PyMuPDF +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Adjust the setup.py script as necessary. E.g. make sure that: + + * the include directory is correctly set in sync with your directory structure + * the object code libraries are correctly defined + +Now perform a *python setup.py install*. + +.. note:: You can also install from the sources of the Github repository. These **do not contain** the pre-generated files *fitz.py* or *fitz_wrap.c*, which instead are generated by the installation script *setup.py*. To use it, `SWIG `_ must be installed on your system. + + +.. _InstallBinary: + +Option 2: Install from Binaries +-------------------------------- +You can install PyMuPDF from Python wheels. The wheels are *self-contained*, i.e. you will **not need any other software** nor download / install MuPDF to run PyMuPDF scripts. +This installation option is available for all MS Windows and the most **popular 64-bit** Mac OSX and Linux platforms for Python versions 2.7 and 3.5 through 3.8. +Windows binaries are provided for Python **32-bit and 64-bit** versions. + +**Overview of wheel names (PyMuPDF version is x.xx.xx):** + +.. literalinclude:: wheelnames.txt + + +Older versions can be found in the releases directory of our home page https://github.com/pymupdf/PyMuPDF/releases. + +If you unexpectedly run into problems installing the wheel for your system, please make sure you have updated your PIP to the current version. + diff --git a/docs/intro.rst b/docs/intro.rst new file mode 100644 index 0000000..8b4a9aa --- /dev/null +++ b/docs/intro.rst @@ -0,0 +1,59 @@ +Introduction +============== + +.. image:: images/img-pymupdf.jpg + :align: center + +**PyMuPDF** is a Python binding for `MuPDF `_ -- "a lightweight PDF and XPS viewer". + +MuPDF can access files in PDF, XPS, OpenXPS, CBZ (comic book archive), FB2 and EPUB (e-book) formats. + +These are files with extensions *.pdf*, *.xps*, *.oxps*, *.cbz*, *.fb2* or *.epub* (so you can develop **e-book viewers in Python** ...). + +PyMuPDF provides access to many important functions of MuPDF from within a Python environment, and we are continuously seeking to expand this function set. + +MuPDF stands out among all similar products for its top rendering capability and unsurpassed processing speed. At the same time, its "light weight" makes it an excellent choice for platforms where resources are typically limited, like smartphones. + +Check this out yourself and compare the various free PDF-viewers. In terms of speed and rendering quality `SumatraPDF `_ ranges at the top (apart from MuPDF's own standalone viewer) -- since it has changed its library basis to MuPDF! + +While PyMuPDF has been available since several years for an earlier version of MuPDF (v1.2, called **fitz-python** then), it was until only mid May 2015, that its creator and a few co-workers decided to elevate it to support current releases of MuPDF. + +PyMuPDF runs and has been tested on Mac, Linux, Windows XP SP2 and up, Python 2.7 through Python 3.7 (note that Python supports Windows XP only up to v3.4), 32bit and 64bit versions. Other platforms should work too, as long as MuPDF and Python support them. + +PyMuPDF is hosted on `GitHub `_. We also are registered on `PyPI `_. + +For MS Windows and popular Python versions on Mac OSX and Linux we have created wheels. So installation should be convenient enough for hopefully most of our users: just issue + +*pip install --upgrade pymupdf* + +If your platform is not among those supported with a wheel, your installation consists of two separate steps: + +1. Installation of MuPDF: this involves downloading the source from their website and then compiling it on your machine. Adjust *setup.py* to point to the right directories (next step), before you try generating PyMuPDF. + +2. Installation of PyMuPDF: this step is normal Python procedure. Usually you will have to adapt the *setup.py* to point to correct *include* and *lib* directories of your generated MuPDF. + +For installation details check out the respective chapter. + +There exist several `demo `_ and `example `_ programs in the main repository, ranging from simple code snippets to full-featured utilities, like text extraction, PDF joiners and bookmark maintenance. + +Interesting **PDF manipulation and generation** functions have been added over time, including metadata and bookmark maintenance, document restructuring, annotation / link handling and document or page creation. + +Note on the Name *fitz* +-------------------------- +The standard Python import statement for this library is *import fitz*. This has a historical reason: + +The original rendering library for MuPDF was called *Libart*. + +*"After Artifex Software acquired the MuPDF project, the development focus shifted on writing a new modern graphics library called *Fitz*. Fitz was originally intended as an R&D project to replace the aging Ghostscript graphics library, but has instead become the rendering engine powering MuPDF."* (Quoted from `Wikipedia `_). + +License +-------- +PyMuPDF is distributed under GNU GPL V3 (or later, at your choice). + +MuPDF is distributed under a separate license, the **GNU AFFERO GPL V3**. + +Both licenses apply, when you use PyMuPDF. + +.. note:: Version 3 of the GNU AFFERO GPL is a lot less restrictive than its earlier versions used to be. It basically is an open source freeware license, that obliges your software to also being open source and freeware. Consult `this website `_, if you want to create a commercial product with PyMuPDF. + +.. include:: version.rst diff --git a/docs/irect.rst b/docs/irect.rst new file mode 100644 index 0000000..684f84f --- /dev/null +++ b/docs/irect.rst @@ -0,0 +1,207 @@ +.. _IRect: + +========== +IRect +========== + +IRect is a rectangular bounding box similar to :ref:`Rect`, except that all corner coordinates are integers. IRect is used to specify an area of pixels, e.g. to receive image data during rendering. Otherwise, many similarities exist, e.g. considerations concerning emptiness and finiteness of rectangles also apply to this class. + +============================== =========================================== +**Attribute / Method** **Short Description** +============================== =========================================== +:meth:`IRect.contains` checks containment of another object +:meth:`IRect.getArea` calculate rectangle area +:meth:`IRect.getRect` return a :ref:`Rect` with same coordinates +:meth:`IRect.getRectArea` calculate rectangle area +:meth:`IRect.intersect` common part with another rectangle +:meth:`IRect.intersects` checks for non-empty intersection +:meth:`IRect.morph` transform with a point and a matrix +:meth:`IRect.norm` the Euclidean norm +:meth:`IRect.normalize` makes a rectangle finite +:attr:`IRect.bottom_left` bottom left point, synonym *bl* +:attr:`IRect.bottom_right` bottom right point, synonym *br* +:attr:`IRect.height` height of the rectangle +:attr:`IRect.isEmpty` whether rectangle is empty +:attr:`IRect.isInfinite` whether rectangle is infinite +:attr:`IRect.rect` equals result of method *getRect()* +:attr:`IRect.top_left` top left point, synonym *tl* +:attr:`IRect.top_right` top_right point, synonym *tr* +:attr:`IRect.quad` :ref:`Quad` made from rectangle corners +:attr:`IRect.width` width of the rectangle +:attr:`IRect.x0` X-coordinate of the top left corner +:attr:`IRect.x1` X-coordinate of the bottom right corner +:attr:`IRect.y0` Y-coordinate of the top left corner +:attr:`IRect.y1` Y-coordinate of the bottom right corner +============================== =========================================== + +**Class API** + +.. class:: IRect + + .. method:: __init__(self) + + .. method:: __init__(self, x0, y0, x1, y1) + + .. method:: __init__(self, irect) + + .. method:: __init__(self, sequence) + + Overloaded constructors. Also see examples below and those for the :ref:`Rect` class. + + If another irect is specified, a **new copy** will be made. + + If sequence is specified, it must be a Python sequence type of 4 numbers (see :ref:`SequenceTypes`). Non-integer numbers will be truncated, non-numeric entries will raise an exception. + + The other parameters mean integer coordinates. + + .. method:: getRect() + + A convenience function returning a :ref:`Rect` with the same coordinates. Also available as attribute *rect*. + + :rtype: :ref:`Rect` + + .. method:: getRectArea([unit]) + + .. method:: getArea([unit]) + + Calculates the area of the rectangle and, with no parameter, equals *abs(IRect)*. Like an empty rectangle, the area of an infinite rectangle is also zero. + + :arg str unit: Specify required unit: respective squares of "px" (pixels, default), "in" (inches), "cm" (centimeters), or "mm" (millimeters). + + :rtype: float + + .. method:: intersect(ir) + + The intersection (common rectangular area) of the current rectangle and *ir* is calculated and replaces the current rectangle. If either rectangle is empty, the result is also empty. If either rectangle is infinite, the other one is taken as the result -- and hence also infinite if both rectangles were infinite. + + :arg rect_like ir: Second rectangle. + + .. method:: contains(x) + + Checks whether *x* is contained in the rectangle. It may be :data:`rect_like`, :data:`point_like` or a number. If *x* is an empty rectangle, this is always true. Conversely, if the rectangle is empty this is always *False*, if *x* is not an empty rectangle and not a number. If *x* is a number, it will be checked to be one of the four components. *x in irect* and *irect.contains(x)* are equivalent. + + :arg x: the object to check. + :type x: :ref:`IRect` or :ref:`Rect` or :ref:`Point` or int + + :rtype: bool + + .. method:: intersects(r) + + Checks whether the rectangle and the :data:`rect_like` "r" contain a common non-empty :ref:`IRect`. This will always be *False* if either is infinite or empty. + + :arg rect_like r: the rectangle to check. + + :rtype: bool + + .. method:: morph(fixpoint, matrix) + + *(New in version 1.17.0)* + + Return a new quad after applying a matrix to it using a fixed point. + + :arg point_like fixpoint: the fixed point. + :arg matrix_like matrix: the matrix. + :returns: a new :ref:`Quad`. This a wrapper of the same-named quad method. + + .. method:: norm() + + *(New in version 1.16.0)* + + Return the Euclidean norm of the rectangle treated as a vector of four numbers. + + .. method:: normalize() + + Make the rectangle finite. This is done by shuffling rectangle corners. After this, the bottom right corner will indeed be south-eastern to the top left one. See :ref:`Rect` for a more details. + + .. attribute:: top_left + + .. attribute:: tl + + Equals *Point(x0, y0)*. + + :type: :ref:`Point` + + .. attribute:: top_right + + .. attribute:: tr + + Equals *Point(x1, y0)*. + + :type: :ref:`Point` + + .. attribute:: bottom_left + + .. attribute:: bl + + Equals *Point(x0, y1)*. + + :type: :ref:`Point` + + .. attribute:: bottom_right + + .. attribute:: br + + Equals *Point(x1, y1)*. + + :type: :ref:`Point` + + .. attribute:: quad + + The quadrilateral *Quad(irect.tl, irect.tr, irect.bl, irect.br)*. + + :type: :ref:`Quad` + + .. attribute:: width + + Contains the width of the bounding box. Equals *abs(x1 - x0)*. + + :type: int + + .. attribute:: height + + Contains the height of the bounding box. Equals *abs(y1 - y0)*. + + :type: int + + .. attribute:: x0 + + X-coordinate of the left corners. + + :type: int + + .. attribute:: y0 + + Y-coordinate of the top corners. + + :type: int + + .. attribute:: x1 + + X-coordinate of the right corners. + + :type: int + + .. attribute:: y1 + + Y-coordinate of the bottom corners. + + :type: int + + .. attribute:: isInfinite + + *True* if rectangle is infinite, *False* otherwise. + + :type: bool + + .. attribute:: isEmpty + + *True* if rectangle is empty, *False* otherwise. + + :type: bool + + +.. note:: + + * This class adheres to the Python sequence protocol, so components can be accessed via their index, too. Also refer to :ref:`SequenceTypes`. + * Rectangles can be used with arithmetic operators -- see chapter :ref:`Algebra`. + diff --git a/docs/kerning.style b/docs/kerning.style new file mode 100644 index 0000000..35ccdee --- /dev/null +++ b/docs/kerning.style @@ -0,0 +1,18 @@ +fontsAlias: + stdBold: DejaVu Sans-Bold + stdBoldItalic: DejaVu Sans-BoldOblique + stdFont: DejaVu Sans + stdItalic: DejaVu Sans-Oblique + stdMono: Courier New + stdMonoBold: DejaVu Sans Mono-Bold + stdMonoBoldItalic: DejaVu Sans Mono-BoldOblique + stdMonoItalic: DejaVu Sans Mono-Oblique + stdSans: DejaVu Sans + stdSansBold: DejaVu Sans-Bold + stdSansBoldItalic: DejaVu Sans-BoldOblique + stdSansItalic: DejaVu Sans-Oblique + stdSerif: DejaVu Serif + +styles: base: kerning: true + +styles: bodytext: alignment: left diff --git a/docs/link.rst b/docs/link.rst new file mode 100644 index 0000000..cbe4738 --- /dev/null +++ b/docs/link.rst @@ -0,0 +1,104 @@ +.. _Link: + +================ +Link +================ +Represents a pointer to somewhere (this document, other documents, the internet). Links exist per document page, and they are forward-chained to each other, starting from an initial link which is accessible by the :attr:`Page.firstLink` property. + +There is a parent-child relationship between a link and its page. If the page object becomes unusable (closed document, any document structure change, etc.), then so does every of its existing link objects -- an exception is raised saying that the object is "orphaned", whenever a link property or method is accessed. + +========================= ============================================ +**Attribute** **Short Description** +========================= ============================================ +:meth:`Link.setBorder` modify border properties +:meth:`Link.setColors` modify color properties +:attr:`Link.border` border characteristics +:attr:`Link.colors` border line color +:attr:`Link.dest` points to link destination details +:attr:`Link.isExternal` external link destination? +:attr:`Link.next` points to next link +:attr:`Link.rect` clickable area in untransformed coordinates. +:attr:`Link.uri` link destination +:attr:`Link.xref` :data:`xref` number of the entry +========================= ============================================ + +**Class API** + +.. class:: Link + + .. method:: setBorder(border=None, width=0, style=None, dashes=None) + + PDF only: Change border width and dashing properties. + + *(Changed in version 1.16.9)* Allow specification without using a dictionary. The direct parameters are used if *border* is not a dictionary. + + :arg dict border: a dictionary as returned by the :attr:`border` property, with keys *"width"* (*float*), *"style"* (*str*) and *"dashes"* (*sequence*). Omitted keys will leave the resp. property unchanged. To e.g. remove dashing use: *"dashes": []*. If dashes is not an empty sequence, "style" will automatically be set to "D" (dashed). + + :arg float width: see above. + :arg str style: see above. + :arg sequence dashes: see above. + + .. method:: setColors(colors=None, stroke=None, fill=None) + + Changes the "stroke" and "fill" colors. + + *(Changed in version 1.16.9)* Allow colors to be directly set. These parameters are used if *colors* is not a dictionary. + + :arg dict colors: a dictionary containing color specifications. For accepted dictionary keys and values see below. The most practical way should be to first make a copy of the *colors* property and then modify this dictionary as required. + :arg sequence stroke: see above. + :arg sequence fill: see above. + + + .. attribute:: colors + + Meaningful for PDF only: A dictionary of two lists of floats in range *0 <= float <= 1* specifying the *stroke* and the interior (*fill*) colors. If not a PDF, *None* is returned. The stroke color is used for borders and everything that is actively painted or written ("stroked"). The lengths of these lists implicitely determine the colorspaces used: 1 = GRAY, 3 = RGB, 4 = CMYK. So *[1.0, 0.0, 0.0]* stands for RGB color red. Both lists can be *[]* if no color is specified. The value of each float *f* is mapped to the integer value *i* in range 0 to 255 via the computation *f = i / 255*. + + :rtype: dict + + .. attribute:: border + + Meaningful for PDF only: A dictionary containing border characteristics. It will be *None* for non-PDFs and an empty dictionary if no border information exists. The following keys can occur: + + * *width* -- a float indicating the border thickness in points. The value is -1.0 if no width is specified. + + * *dashes* -- a sequence of integers specifying a line dash pattern. *[]* means no dashes, *[n]* means equal on-off lengths of *n* points, longer lists will be interpreted as specifying alternating on-off length values. See the :ref:`AdobeManual` page 217 for more details. + + * *style* -- 1-byte border style: *S* (Solid) = solid rectangle surrounding the annotation, *D* (Dashed) = dashed rectangle surrounding the link, the dash pattern is specified by the *dashes* entry, *B* (Beveled) = a simulated embossed rectangle that appears to be raised above the surface of the page, *I* (Inset) = a simulated engraved rectangle that appears to be recessed below the surface of the page, *U* (Underline) = a single line along the bottom of the annotation rectangle. + + :rtype: dict + + .. attribute:: rect + + The area that can be clicked in untransformed coordinates. + + :type: :ref:`Rect` + + .. attribute:: isExternal + + A bool specifying whether the link target is outside of the current document. + + :type: bool + + .. attribute:: uri + + A string specifying the link target. The meaning of this property should be evaluated in conjunction with property *isExternal*. The value may be *None*, in which case *isExternal == False*. If *uri* starts with *file://*, *mailto:*, or an internet resource name, *isExternal* is *True*. In all other cases *isExternal == False* and *uri* points to an internal location. In case of PDF documents, this should either be *#nnnn* to indicate a 1-based (!) page number *nnnn*, or a named location. The format varies for other document types, e.g. *uri = '../FixedDoc.fdoc#PG_2_LNK_1'* for page number 2 (1-based) in an XPS document. + + :type: str + + .. attribute:: xref + + An integer specifying the PDF :data:`xref`. Zero if not a PDF. + + :type: int + + .. attribute:: next + + The next link or *None*. + + :type: *Link* + + .. attribute:: dest + + The link destination details object. + + :type: :ref:`linkDest` diff --git a/docs/linkdest.rst b/docs/linkdest.rst new file mode 100644 index 0000000..ff01b26 --- /dev/null +++ b/docs/linkdest.rst @@ -0,0 +1,99 @@ +.. _linkDest: + +================ +linkDest +================ +Class representing the `dest` property of an outline entry or a link. Describes the destination to which such entries point. + +=========================== ==================================== +**Attribute** **Short Description** +=========================== ==================================== +:attr:`linkDest.dest` destination +:attr:`linkDest.fileSpec` file specification (path, filename) +:attr:`linkDest.flags` descriptive flags +:attr:`linkDest.isMap` is this a MAP? +:attr:`linkDest.isUri` is this a URI? +:attr:`linkDest.kind` kind of destination +:attr:`linkDest.lt` top left coordinates +:attr:`linkDest.named` name if named destination +:attr:`linkDest.newWindow` name of new window +:attr:`linkDest.page` page number +:attr:`linkDest.rb` bottom right coordinates +:attr:`linkDest.uri` URI +=========================== ==================================== + +**Class API** + +.. class:: linkDest + + .. attribute:: dest + + Target destination name if :attr:`linkDest.kind` is :data:`LINK_GOTOR` and :attr:`linkDest.page` is *-1*. + + :type: str + + .. attribute:: fileSpec + + Contains the filename and path this link points to, if :attr:`linkDest.kind` is :data:`LINK_GOTOR` or :data:`LINK_LAUNCH`. + + :type: str + + .. attribute:: flags + + A bitfield describing the validity and meaning of the different aspects of the destination. As far as possible, link destinations are constructed such that e.g. :attr:`linkDest.lt` and :attr:`linkDest.rb` can be treated as defining a bounding box. But the flags indicate which of the values were actually specified, see :ref:`linkDest Flags`. + + :type: int + + .. attribute:: isMap + + This flag specifies whether to track the mouse position when the URI is resolved. Default value: False. + + :type: bool + + .. attribute:: isUri + + Specifies whether this destination is an internet resource (as opposed to e.g. a local file specification in URI format). + + :type: bool + + .. attribute:: kind + + Indicates the type of this destination, like a place in this document, a URI, a file launch, an action or a place in another file. Look at :ref:`linkDest Kinds` to see the names and numerical values. + + :type: int + + .. attribute:: lt + + The top left :ref:`Point` of the destination. + + :type: :ref:`Point` + + .. attribute:: named + + This destination refers to some named action to perform (e.g. a javascript, see :ref:`AdobeManual`). Standard actions provided are *NextPage*, *PrevPage*, *FirstPage*, and *LastPage*. + + :type: str + + .. attribute:: newWindow + + If true, the destination should be launched in a new window. + + :type: bool + + .. attribute:: page + + The page number (in this or the target document) this destination points to. Only set if :attr:`linkDest.kind` is :data:`LINK_GOTOR` or :data:`LINK_GOTO`. May be *-1* if :attr:`linkDest.kind` is :data:`LINK_GOTOR`. In this case :attr:`linkDest.dest` contains the **name** of a destination in the target document. + + :type: int + + .. attribute:: rb + + The bottom right :ref:`Point` of this destination. + + :type: :ref:`Point` + + .. attribute:: uri + + The name of the URI this destination points to. + + :type: str diff --git a/docs/lowlevel.rst b/docs/lowlevel.rst new file mode 100644 index 0000000..0db7cdc --- /dev/null +++ b/docs/lowlevel.rst @@ -0,0 +1,11 @@ +================================= +Low Level Functions and Classes +================================= +Contains a number of functions and classes for the experienced user. To be used for special needs or performance requirements. + +.. toctree:: + :maxdepth: 1 + + functions + device + coop_low diff --git a/docs/make-bold.py b/docs/make-bold.py new file mode 100644 index 0000000..c809d07 --- /dev/null +++ b/docs/make-bold.py @@ -0,0 +1,76 @@ +""" +Problem: Since MuPDF v1.16 a 'Freetext' annotation font is restricted to the +"normal" versions (no bold, no italics) of Times-Roman, Helvetica, Courier. +It is impossible to use PyMuPDF to modify this. + +Solution: Using Adobe's JavaScript API, it is possible to manipulate properties +of Freetext annotations. Check out these references: +https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/js_api_reference.pdf, +or https://www.adobe.com/devnet/acrobat/documentation.html. + +Function 'this.getAnnots()' will return all annotations as an array. We loop +over this array to set the properties of the text through the 'richContents' +attribute. +There is no explicit property to set text to bold, but it is possible to set +fontWeight=800 (400 is the normal size) of richContents. +Other attributes, like color, italics, etc. can also be set via richContents. + +If we have 'FreeText' annotations created with PyMuPDF, we can make use of this +JavaScript feature to modify the font - thus circumventing the above restriction. + +Use PyMuPDF v1.16.12 to create a push button that executes a Javascript +containing the desired code. This is what this program does. +Then open the resulting file with Adobe reader (!). +After clicking on the button, all Freetext annotations will be bold, and the +file can be saved. +If desired, the button can be removed again, using free tools like PyMuPDF or +PDF XChange editor. + +Note / Caution: +--------------- +The JavaScript will **only** work if the file is opened with Adobe Acrobat reader! +When using other PDF viewers, the reaction is unforeseeable. +""" +import sys + +import fitz + +# this JavaScript will execute when the button is clicked: +jscript = """ +var annt = this.getAnnots(); +annt.forEach(function (item, index) { + try { + var span = item.richContents; + span.forEach(function (it, dx) { + it.fontWeight = 800; + }) + item.richContents = span; + } catch (err) {} +}); +app.alert('Done'); +""" +i_fn = sys.argv[1] # input file name +o_fn = "bold-" + i_fn # output filename +doc = fitz.open(i_fn) # open input +page = doc[0] # get desired page + +# ------------------------------------------------ +# make a push button for invoking the JavaScript +# ------------------------------------------------ + +widget = fitz.Widget() # create widget + +# make it a 'PushButton' +widget.field_type = fitz.PDF_WIDGET_TYPE_BUTTON +widget.field_flags = fitz.PDF_BTN_FIELD_IS_PUSHBUTTON + +widget.rect = fitz.Rect(5, 5, 20, 20) # button position + +widget.script = jscript # fill in JavaScript source text +widget.field_name = "Make bold" # arbitrary name +widget.field_value = "Off" # arbitrary value +widget.fill_color = (0, 0, 1) # make button visible + +annot = page.addWidget(widget) # add the widget to the page +doc.save(o_fn) # output the file + diff --git a/docs/matrix.rst b/docs/matrix.rst new file mode 100644 index 0000000..1426f46 --- /dev/null +++ b/docs/matrix.rst @@ -0,0 +1,243 @@ + +.. _Matrix: + +========== +Matrix +========== + +Matrix is a row-major 3x3 matrix used by image transformations in MuPDF (which complies with the respective concepts laid down in the :ref:`AdobeManual`). With matrices you can manipulate the rendered image of a page in a variety of ways: (parts of) the page can be rotated, zoomed, flipped, sheared and shifted by setting some or all of just six float values. + +.. |matrix| image:: images/img-matrix.png + +Since all points or pixels live in a two-dimensional space, one column vector of that matrix is a constant unit vector, and only the remaining six elements are used for manipulations. These six elements are usually represented by *[a, b, c, d, e, f]*. Here is how they are positioned in the matrix: + +|matrix| + +Please note: + + * the below methods are just convenience functions -- everything they do, can also be achieved by directly manipulating the six numerical values + * all manipulations can be combined -- you can construct a matrix that rotates **and** shears **and** scales **and** shifts, etc. in one go. If you however choose to do this, do have a look at the **remarks** further down or at the :ref:`AdobeManual`. + +================================ ============================================== +**Method / Attribute** **Description** +================================ ============================================== +:meth:`Matrix.preRotate` perform a rotation +:meth:`Matrix.preScale` perform a scaling +:meth:`Matrix.preShear` perform a shearing (skewing) +:meth:`Matrix.preTranslate` perform a translation (shifting) +:meth:`Matrix.concat` perform a matrix multiplication +:meth:`Matrix.invert` calculate the inverted matrix +:meth:`Matrix.norm` the Euclidean norm +:attr:`Matrix.a` zoom factor X direction +:attr:`Matrix.b` shearing effect Y direction +:attr:`Matrix.c` shearing effect X direction +:attr:`Matrix.d` zoom factor Y direction +:attr:`Matrix.e` horizontal shift +:attr:`Matrix.f` vertical shift +:attr:`Matrix.isRectilinear` true if rect corners will remain rect corners +================================ ============================================== + +**Class API** + +.. class:: Matrix + + .. method:: __init__(self) + + .. method:: __init__(self, zoom-x, zoom-y) + + .. method:: __init__(self, shear-x, shear-y, 1) + + .. method:: __init__(self, a, b, c, d, e, f) + + .. method:: __init__(self, matrix) + + .. method:: __init__(self, degree) + + .. method:: __init__(self, sequence) + + Overloaded constructors. + + Without parameters, the zero matrix *Matrix(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)* will be created. + + *zoom-** and *shear-** specify zoom or shear values (float) and create a zoom or shear matrix, respectively. + + For "matrix" a **new copy** of another matrix will be made. + + Float value "degree" specifies the creation of a rotation matrix which rotates anit-clockwise. + + A "sequence" must be any Python sequence object with exactly 6 float entries (see :ref:`SequenceTypes`). + + *fitz.Matrix(1, 1)*, *fitz.Matrix(0.0)* and *fitz.Matrix(fitz.Identity)* create modifyable versions of the :ref:`Identity` matrix, which looks like *[1, 0, 0, 1, 0, 0]*. + + .. method:: norm() + + *(New in version 1.16.0)* + + Return the Euclidean norm of the matrix as a vector. + + .. method:: preRotate(deg) + + Modify the matrix to perform a counter-clockwise rotation for positive *deg* degrees, else clockwise. The matrix elements of an identity matrix will change in the following way: + + *[1, 0, 0, 1, 0, 0] -> [cos(deg), sin(deg), -sin(deg), cos(deg), 0, 0]*. + + :arg float deg: The rotation angle in degrees (use conventional notation based on Pi = 180 degrees). + + .. method:: preScale(sx, sy) + + Modify the matrix to scale by the zoom factors sx and sy. Has effects on attributes *a* thru *d* only: *[a, b, c, d, e, f] -> [a*sx, b*sx, c*sy, d*sy, e, f]*. + + :arg float sx: Zoom factor in X direction. For the effect see description of attribute *a*. + + :arg float sy: Zoom factor in Y direction. For the effect see description of attribute *d*. + + .. method:: preShear(sx, sy) + + Modify the matrix to perform a shearing, i.e. transformation of rectangles into parallelograms (rhomboids). Has effects on attributes *a* thru *d* only: *[a, b, c, d, e, f] -> [c*sy, d*sy, a*sx, b*sx, e, f]*. + + :arg float sx: Shearing effect in X direction. See attribute *c*. + + :arg float sy: Shearing effect in Y direction. See attribute *b*. + + .. method:: preTranslate(tx, ty) + + Modify the matrix to perform a shifting / translation operation along the x and / or y axis. Has effects on attributes *e* and *f* only: *[a, b, c, d, e, f] -> [a, b, c, d, tx*a + ty*c, tx*b + ty*d]*. + + :arg float tx: Translation effect in X direction. See attribute *e*. + + :arg float ty: Translation effect in Y direction. See attribute *f*. + + .. method:: concat(m1, m2) + + Calculate the matrix product *m1 * m2* and store the result in the current matrix. Any of *m1* or *m2* may be the current matrix. Be aware that matrix multiplication is not commutative. So the sequence of *m1*, *m2* is important. + + :arg m1: First (left) matrix. + :type m1: :ref:`Matrix` + + :arg m2: Second (right) matrix. + :type m2: :ref:`Matrix` + + .. method:: invert(m = None) + + Calculate the matrix inverse of *m* and store the result in the current matrix. Returns *1* if *m* is not invertible ("degenerate"). In this case the current matrix **will not change**. Returns *0* if *m* is invertible, and the current matrix is replaced with the inverted *m*. + + :arg m: Matrix to be inverted. If not provided, the current matrix will be used. + :type m: :ref:`Matrix` + + :rtype: int + + .. attribute:: a + + Scaling in X-direction **(width)**. For example, a value of 0.5 performs a shrink of the **width** by a factor of 2. If a < 0, a left-right flip will (additionally) occur. + + :type: float + + .. attribute:: b + + Causes a shearing effect: each *Point(x, y)* will become *Point(x, y - b*x)*. Therefore, looking from left to right, e.g. horizontal lines will be "tilt" -- downwards if b > 0, upwards otherwise (b is the tangens of the tilting angle). + + :type: float + + .. attribute:: c + + Causes a shearing effect: each *Point(x, y)* will become *Point(x - c*y, y)*. Therefore, looking upwards, vertical lines will be "tilt" -- to the left if c > 0, to the right otherwise (c ist the tangens of the tilting angle). + + :type: float + + .. attribute:: d + + Scaling in Y-direction **(height)**. For example, a value of 1.5 performs a stretch of the **height** by 50%. If d < 0, an up-down flip will (additionally) occur. + + :type: float + + .. attribute:: e + + Causes a horizontal shift effect: Each *Point(x, y)* will become *Point(x + e, y)*. Positive (negative) values of *e* will shift right (left). + + :type: float + + .. attribute:: f + + Causes a vertical shift effect: Each *Point(x, y)* will become *Point(x, y - f)*. Positive (negative) values of *f* will shift down (up). + + :type: float + + .. attribute:: isRectilinear + + Rectilinear means that no shearing is present and that any rotations are integer multiples of 90 degrees. Usually this is used to confirm that (axis-aligned) rectangles before the transformation are still axis-aligned rectangles afterwards. + + :type: bool + +.. note:: + + * This class adheres to the Python sequence protocol, so components can be accessed via their index, too. Also refer to :ref:`SequenceTypes`. + * A matrix can be used with arithmetic operators -- see chapter :ref:`Algebra`. + * Changes of matrix properties and execution of matrix methods can be executed consecutively. This is the same as multiplying the respective matrices. + * Matrix multiplication is **not commutative** -- changing the execution sequence in general changes the result. So it can quickly become unclear which result a transformation will yield. + +To keep results foreseeable for a series of matrix operations, Adobe recommends the following approach (:ref:`AdobeManual`, page 206): + +1. Shift ("translate") +2. Rotate +3. Scale or shear ("skew") + + +Examples +------------- +Here are examples to illustrate some of the effects achievable. The following pictures start with a page of the PDF version of this help file. We show what happens when a matrix is being applied (though always full pages are created, only parts are displayed here to save space). + +.. |original| image:: images/img-original.png + +This is the original page image: + +|original| + +Shifting +------------ +.. |e100| image:: images/img-e-is-100.png + +We transform it with a matrix where *e = 100* (right shift by 100 pixels). + +|e100| + +.. |f100| image:: images/img-f-is-100.png + +Next we do a down shift by 100 pixels: *f = 100*. + +|f100| + +Flipping +-------------- +.. |aminus1| image:: images/img-a-is--1.png + +Flip the page left-right (*a = -1*). + +|aminus1| + +.. |dminus1| image:: images/img-d-is--1.png + +Flip up-down (*d = -1*). + +|dminus1| + +Shearing +---------------- +.. |bnull5| image:: images/img-b-is-0.5.png + +First a shear in Y direction (*b = 0.5*). + +|bnull5| + +.. |cnull5| image:: images/img-c-is-0.5.png + +Second a shear in X direction (*c = 0.5*). + +|cnull5| + +Rotating +--------- +.. |rot60| image:: images/img-rot-60.png + +Finally a rotation by 30 clockwise degrees (*preRotate(-30)*). + +|rot60| diff --git a/docs/module.rst b/docs/module.rst new file mode 100644 index 0000000..3ff7989 --- /dev/null +++ b/docs/module.rst @@ -0,0 +1,411 @@ +.. _Module: + +============================ +Using *fitz* as a Module +============================ + +.. highlight:: python + +*(New in version 1.16.8)* + +PyMuPDF can also be used in the command line as a **module** to perform basic utility functions. + +This is work in progress and subject to changes. This feature should obsolete writing some of the most basic scripts. + +As a guideline we are using the feature set of MuPDF command line tools. Admittedly, there is some functional overlap. On the other hand, PDF embedded files are no longer supported by MuPDF, so PyMuPDF is offering something unique here. + +Invocation +----------- + +Invoke the module like this:: + + python -m fitz command parameters + +General remarks: + +* Request help via *"-h"*, resp. command-specific help via *"command -h"*. +* Parameters may be abbreviated as long as the result is not ambiguous (Python 3.5 or later only). +* Several commands support parameters *-pages* and *-xrefs*. They are intended for down-selection. Please note that: + + - **page numbers** for this utility must be given **1-based**. + - valid :data:`xref` numbers start at 1. + - Specify any number of either single integers or integer ranges, separated by one comma each. A **range** is a pair of integers separated by one hyphen "-". Integers must not exceed the maximum page number or resp. :data:`xref` number. To specify that maximum, the symbolic variable "N" may be used instead of an integer. Integers or ranges may occur several times, in any sequence and may overlap. If in a range the first number is greater than the second one, the respective items will be processed in reversed order. + +* You can also use the fitz module inside your script:: + + >>> from fitz.__main__ import main as fitz_command + >>> cmd = "clean input.pdf output.pdf -pages 1,N".split() # prepare command + >>> saved_parms = sys.argv[1:] # save original parameters + >>> sys.argv[1:] = cmd # store command + >>> fitz_command() # execute command + >>> sys.argv[1:] = saved_parms # restore original parameters + +* You can use the following 2-liner and compile it with `Nuitka `_ in either normal or standalone mode, if you want to distribute it. This will give you a command line utility with all the functions explained below:: + + from fitz.__main__ import main + main() + + +Cleaning and Copying +---------------------- + +.. highlight:: text + +This command will optimize the PDF and store the result in a new file. You can use it also for encryption, decryption and creating sub documents. It is mostly similar to the MuPDF command line utility *"mutool clean"*:: + + python -m fitz clean -h + usage: fitz clean [-h] [-password PASSWORD] + [-encryption {keep,none,rc4-40,rc4-128,aes-128,aes-256}] + [-owner OWNER] [-user USER] [-garbage {0,1,2,3,4}] + [-compress] [-ascii] [-linear] [-permission PERMISSION] + [-sanitize] [-pretty] [-pages PAGES] + input output + + -------------- optimize PDF or create sub-PDF if pages given -------------- + + positional arguments: + input PDF filename + output output PDF filename + + optional arguments: + -h, --help show this help message and exit + -password PASSWORD password + -encryption {keep,none,rc4-40,rc4-128,aes-128,aes-256} + encryption method + -owner OWNER owner password + -user USER user password + -garbage {0,1,2,3,4} garbage collection level + -compress compress (deflate) output + -ascii ASCII encode binary data + -linear format for fast web display + -permission PERMISSION + integer with permission levels + -sanitize sanitize / clean contents + -pretty prettify PDF structure + -pages PAGES output selected pages, format: 1,5-7,50-N + +If you specify "-pages", be aware that only page-related objects are copied, **no document-level items** like e.g. embedded files. + +Please consult :meth:`Document.save` for the parameter meanings. + + +Extracting Fonts and Images +---------------------------- +Extract fonts or images from selected PDF pages to a desired directory:: + + python -m fitz extract -h + usage: fitz extract [-h] [-images] [-fonts] [-output OUTPUT] [-password PASSWORD] + [-pages PAGES] + input + + --------------------- extract images and fonts to disk -------------------- + + positional arguments: + input PDF filename + + optional arguments: + -h, --help show this help message and exit + -images extract images + -fonts extract fonts + -output OUTPUT output directory, defaults to current + -password PASSWORD password + -pages PAGES only consider these pages, format: 1,5-7,50-N + +**Image filenames** are built according to the naming scheme: **"img-xref.ext"**, where "ext" is the extension associated with the image and "xref" the :data:`xref` of the image PDF object. + +**Font filenames** consist of the fontname and the associated extension. Any spaces in the fontname are replaced with hyphens "-". + +The output directory must already exist. + +.. note:: Except for output directory creation, this feature is **functionally equivalent** to and obsoletes `this script `_. + + +Joining PDF Documents +----------------------- +To join several PDF files specify:: + + python -m fitz join -h + usage: fitz join [-h] -output OUTPUT [input [input ...]] + + ---------------------------- join PDF documents --------------------------- + + positional arguments: + input input filenames + + optional arguments: + -h, --help show this help message and exit + -output OUTPUT output filename + + specify each input as 'filename[,password[,pages]]' + + +.. note:: + + 1. Each input must be entered as **"filename,password,pages"**. Password and pages are optional. + 2. The password entry **is required** if the "pages" entry is used. If the PDF needs no password, specify two commas. + 3. The **"pages"** format is the same as explained at the top of this section. + 4. Each input file is immediately closed after use. Therefore you can use one of them as output filename, and thus overwrite it. + + +Example: To join the following files + +1. **file1.pdf:** all pages, back to front, no password +2. **file2.pdf:** last page, first page, password: "secret" +3. **file3.pdf:** pages 5 to last, no password + +and store the result as **output.pdf** enter this command: + +*python -m fitz join -o output.pdf file1.pdf,,N-1 file2.pdf,secret,N,1 file3.pdf,,5-N* + + +Low Level Information +---------------------- + +Display PDF internal information. Again, there are similarities to *"mutool show"*:: + + python -m fitz show -h + usage: fitz show [-h] [-password PASSWORD] [-catalog] [-trailer] [-metadata] + [-xrefs XREFS] [-pages PAGES] + input + + ------------------------- display PDF information ------------------------- + + positional arguments: + input PDF filename + + optional arguments: + -h, --help show this help message and exit + -password PASSWORD password + -catalog show PDF catalog + -trailer show PDF trailer + -metadata show PDF metadata + -xrefs XREFS show selected objects, format: 1,5-7,N + -pages PAGES show selected pages, format: 1,5-7,50-N + +Examples:: + + python -m fitz show x.pdf + PDF is password protected + + python -m fitz show x.pdf -pass hugo + authentication unsuccessful + + python -m fitz show x.pdf -pass jorjmckie + authenticated as owner + file 'x.pdf', pages: 1, objects: 19, 58 MB, PDF 1.4, encryption: Standard V5 R6 256-bit AES + Document contains 15 embedded files. + + python -m fitz show FDA-1572_508_R6_FINAL.pdf -tr -m + 'FDA-1572_508_R6_FINAL.pdf', pages: 2, objects: 1645, 1.4 MB, PDF 1.6, encryption: Standard V4 R4 128-bit AES + document contains 740 root form fields and is signed + + ------------------------------- PDF metadata ------------------------------ + format: PDF 1.6 + title: FORM FDA 1572 + author: PSC Publishing Services + subject: Statement of Investigator + keywords: None + creator: PScript5.dll Version 5.2.2 + producer: Acrobat Distiller 9.0.0 (Windows) + creationDate: D:20130522104413-04'00' + modDate: D:20190718154905-07'00' + encryption: Standard V4 R4 128-bit AES + + ------------------------------- PDF trailer ------------------------------- + << + /DecodeParms << + /Columns 5 + /Predictor 12 + >> + /Encrypt 1389 0 R + /Filter /FlateDecode + /ID [ <9252E9E39183F2A0B0C51BE557B8A8FC> <85227BE9B84B724E8F678E1529BA8351> ] + /Index [ 1388 258 ] + /Info 1387 0 R + /Length 253 + /Prev 1510559 + /Root 1390 0 R + /Size 1646 + /Type /XRef + /W [ 1 3 1 ] + >> + +Embedded Files Commands +------------------------ + +The following commands deal with embedded files -- which is a feature completely removed from MuPDF after v1.14, and hence from all its command line tools. + +Information +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Show the embedded file names (long or short format):: + + python -m fitz embed-info -h + usage: fitz embed-info [-h] [-name NAME] [-detail] [-password PASSWORD] input + + --------------------------- list embedded files --------------------------- + + positional arguments: + input PDF filename + + optional arguments: + -h, --help show this help message and exit + -name NAME if given, report only this one + -detail show detail information + -password PASSWORD password + +Example:: + + python -m fitz embed-info some.pdf + 'some.pdf' contains the following 15 embedded files. + + 20110813_180956_0002.jpg + 20110813_181009_0003.jpg + 20110813_181012_0004.jpg + 20110813_181131_0005.jpg + 20110813_181144_0006.jpg + 20110813_181306_0007.jpg + 20110813_181307_0008.jpg + 20110813_181314_0009.jpg + 20110813_181315_0010.jpg + 20110813_181324_0011.jpg + 20110813_181339_0012.jpg + 20110813_181913_0013.jpg + insta-20110813_180944_0001.jpg + markiert-20110813_180944_0001.jpg + neue.datei + +Detailed output would look like this per entry:: + + name: neue.datei + filename: text-tester.pdf + ufilename: text-tester.pdf + desc: nur zum Testen! + size: 4639 + length: 1566 + +Extraction +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Extract an embedded file like this:: + + python -m fitz embed-extract -h + usage: fitz embed-extract [-h] -name NAME [-password PASSWORD] [-output OUTPUT] + input + + ---------------------- extract embedded file to disk ---------------------- + + positional arguments: + input PDF filename + + optional arguments: + -h, --help show this help message and exit + -name NAME name of entry + -password PASSWORD password + -output OUTPUT output filename, default is stored name + +For details consult :meth:`Document.embeddedFileGet`. Example (refer to previous section):: + + python -m fitz embed-extract some.pdf -name neue.datei + Saved entry 'neue.datei' as 'text-tester.pdf' + +Deletion +~~~~~~~~~~~~~~~~~~~~~~~~ +Delete an embedded file like this:: + + python -m fitz embed-del -h + usage: fitz embed-del [-h] [-password PASSWORD] [-output OUTPUT] -name NAME input + + --------------------------- delete embedded file -------------------------- + + positional arguments: + input PDF filename + + optional arguments: + -h, --help show this help message and exit + -password PASSWORD password + -output OUTPUT output PDF filename, incremental save if none + -name NAME name of entry to delete + +For details consult :meth:`Document.embeddedFileDel`. + +Insertion +~~~~~~~~~~~~~~~~~~~~~~~~ +Add a new embedded file using this command:: + + python -m fitz embed-add -h + usage: fitz embed-add [-h] [-password PASSWORD] [-output OUTPUT] -name NAME -path + PATH [-desc DESC] + input + + ---------------------------- add embedded file ---------------------------- + + positional arguments: + input PDF filename + + optional arguments: + -h, --help show this help message and exit + -password PASSWORD password + -output OUTPUT output PDF filename, incremental save if none + -name NAME name of new entry + -path PATH path to data for new entry + -desc DESC description of new entry + +*"NAME"* **must not** already exist in the PDF. For details consult :meth:`Document.embeddedFileAdd`. + +Updates +~~~~~~~~~~~~~~~~~~~~~~~ +Update an existing embedded file using this command:: + + python -m fitz embed-upd -h + usage: fitz embed-upd [-h] -name NAME [-password PASSWORD] [-output OUTPUT] + [-path PATH] [-filename FILENAME] [-ufilename UFILENAME] + [-desc DESC] + input + + --------------------------- update embedded file -------------------------- + + positional arguments: + input PDF filename + + optional arguments: + -h, --help show this help message and exit + -name NAME name of entry + -password PASSWORD password + -output OUTPUT Output PDF filename, incremental save if none + -path PATH path to new data for entry + -filename FILENAME new filename to store in entry + -ufilename UFILENAME new unicode filename to store in entry + -desc DESC new description to store in entry + + except '-name' all parameters are optional + +Use this method to change meta-information of the file -- just omit the *"PATH"*. For details consult :meth:`Document.embeddedFileUpd`. + + +Copying +~~~~~~~~~~~~~~~~~~~~~~~ +Copy embedded files between PDFs:: + + python -m fitz embed-copy -h + usage: fitz embed-copy [-h] [-password PASSWORD] [-output OUTPUT] -source + SOURCE [-pwdsource PWDSOURCE] + [-name [NAME [NAME ...]]] + input + + --------------------- copy embedded files between PDFs -------------------- + + positional arguments: + input PDF to receive embedded files + + optional arguments: + -h, --help show this help message and exit + -password PASSWORD password of input + -output OUTPUT output PDF, incremental save to 'input' if omitted + -source SOURCE copy embedded files from here + -pwdsource PWDSOURCE password of 'source' PDF + -name [NAME [NAME ...]] + restrict copy to these entries + + +.. highlight:: python diff --git a/docs/multiprocess-gui.py b/docs/multiprocess-gui.py new file mode 100644 index 0000000..0cfa7d0 --- /dev/null +++ b/docs/multiprocess-gui.py @@ -0,0 +1,167 @@ +""" +Created on 2019-05-01 + +@author: yinkaisheng@live.com +@copyright: 2019 yinkaisheng@live.com +@license: GNU GPL 3.0+ + +Demonstrate the use of multiprocessing with PyMuPDF +----------------------------------------------------- +This example shows some more advanced use of multiprocessing. +The main process show a Qt GUI and establishes a 2-way communication with +another process, which accesses a supported document. +""" +import os +import sys +import time +import multiprocessing as mp +import queue +import fitz +from PyQt5 import QtCore, QtGui, QtWidgets + +my_timer = time.clock if str is bytes else time.perf_counter + + +class DocForm(QtWidgets.QWidget): + def __init__(self): + super().__init__() + self.process = None + self.queNum = mp.Queue() + self.queDoc = mp.Queue() + self.pageCount = 0 + self.curPageNum = 0 + self.lastDir = "" + self.timerSend = QtCore.QTimer(self) + self.timerSend.timeout.connect(self.onTimerSendPageNum) + self.timerGet = QtCore.QTimer(self) + self.timerGet.timeout.connect(self.onTimerGetPage) + self.timerWaiting = QtCore.QTimer(self) + self.timerWaiting.timeout.connect(self.onTimerWaiting) + self.initUI() + + def initUI(self): + vbox = QtWidgets.QVBoxLayout() + self.setLayout(vbox) + + hbox = QtWidgets.QHBoxLayout() + self.btnOpen = QtWidgets.QPushButton("OpenDocument", self) + self.btnOpen.clicked.connect(self.openDoc) + hbox.addWidget(self.btnOpen) + + self.btnPlay = QtWidgets.QPushButton("PlayDocument", self) + self.btnPlay.clicked.connect(self.playDoc) + hbox.addWidget(self.btnPlay) + + self.btnStop = QtWidgets.QPushButton("Stop", self) + self.btnStop.clicked.connect(self.stopPlay) + hbox.addWidget(self.btnStop) + + self.label = QtWidgets.QLabel("0/0", self) + self.label.setFont(QtGui.QFont("Verdana", 20)) + hbox.addWidget(self.label) + + vbox.addLayout(hbox) + + self.labelImg = QtWidgets.QLabel("Document", self) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding + ) + self.labelImg.setSizePolicy(sizePolicy) + vbox.addWidget(self.labelImg) + + self.setGeometry(100, 100, 400, 600) + self.setWindowTitle("PyMuPDF Document Player") + self.show() + + def openDoc(self): + path, _ = QtWidgets.QFileDialog.getOpenFileName( + self, + "Open Document", + self.lastDir, + "All Supported Files (*.pdf;*.epub;*.xps;*.oxps;*.cbz;*.fb2);;PDF Files (*.pdf);;EPUB Files (*.epub);;XPS Files (*.xps);;OpenXPS Files (*.oxps);;CBZ Files (*.cbz);;FB2 Files (*.fb2)", + options=QtWidgets.QFileDialog.Options(), + ) + if path: + self.lastDir, self.file = os.path.split(path) + if self.process: + self.queNum.put(-1) # use -1 to notify the process to exit + self.timerSend.stop() + self.curPageNum = 0 + self.pageCount = 0 + self.process = mp.Process( + target=openDocInProcess, args=(path, self.queNum, self.queDoc) + ) + self.process.start() + self.timerGet.start(40) + self.label.setText("0/0") + self.queNum.put(0) + self.startTime = time.perf_counter() + self.timerWaiting.start(40) + + def playDoc(self): + self.timerSend.start(500) + + def stopPlay(self): + self.timerSend.stop() + + def onTimerSendPageNum(self): + if self.curPageNum < self.pageCount - 1: + self.queNum.put(self.curPageNum + 1) + else: + self.timerSend.stop() + + def onTimerGetPage(self): + try: + ret = self.queDoc.get(False) + if isinstance(ret, int): + self.timerWaiting.stop() + self.pageCount = ret + self.label.setText("{}/{}".format(self.curPageNum + 1, self.pageCount)) + else: # tuple, pixmap info + num, samples, width, height, stride, alpha = ret + self.curPageNum = num + self.label.setText("{}/{}".format(self.curPageNum + 1, self.pageCount)) + fmt = ( + QtGui.QImage.Format_RGBA8888 + if alpha + else QtGui.QImage.Format_RGB888 + ) + qimg = QtGui.QImage(samples, width, height, stride, fmt) + self.labelImg.setPixmap(QtGui.QPixmap.fromImage(qimg)) + except queue.Empty as ex: + pass + + def onTimerWaiting(self): + self.labelImg.setText( + 'Loading "{}", {:.2f}s'.format( + self.file, time.perf_counter() - self.startTime + ) + ) + + def closeEvent(self, event): + self.queNum.put(-1) + event.accept() + + +def openDocInProcess(path, queNum, quePageInfo): + start = my_timer() + doc = fitz.open(path) + end = my_timer() + quePageInfo.put(doc.pageCount) + while True: + num = queNum.get() + if num < 0: + break + page = doc.loadPage(num) + pix = page.getPixmap() + quePageInfo.put( + (num, pix.samples, pix.width, pix.height, pix.stride, pix.alpha) + ) + doc.close() + print("process exit") + + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + form = DocForm() + sys.exit(app.exec_()) diff --git a/docs/multiprocess-render.py b/docs/multiprocess-render.py new file mode 100644 index 0000000..09df515 --- /dev/null +++ b/docs/multiprocess-render.py @@ -0,0 +1,79 @@ +""" +Demonstrate the use of multiprocessing with PyMuPDF. + +Depending on the number of CPUs, the document is divided in page ranges. +Each range is then worked on by one process. +The type of work would typically be text extraction or page rendering. Each +process must know where to put its results, because this processing pattern +does not include inter-process communication or data sharing. + +Compared to sequential processing, speed improvements in range of 100% (ie. +twice as fast) or better can be expected. +""" +from __future__ import print_function, division +import sys +import os +import time +from multiprocessing import Pool, cpu_count +import fitz + +# choose a version specific timer function (bytes == str in Python 2) +mytime = time.clock if str is bytes else time.perf_counter + + +def render_page(vector): + """ Render a page range of a document. + + Notes: + The PyMuPDF document cannot be part of the argument, because that + cannot be pickled. So we are being passed in just its filename. + This is no performance issue, because we are a separate process and + need to open the document anyway. + Any page-specific function can be processed here - rendering is just + an example - text extraction might be another. + The work must however be self-contained: no inter-process communication + or synchronization is possible with this design. + Care must also be taken with which parameters are contained in the + argument, because it will be passed in via pickling by the Pool class. + So any large objects will increase the overall duration. + Args: + vector: a list containing required parameters. + """ + # recreate the arguments + idx = vector[0] # this is the segment number we have to process + cpu = vector[1] # number of CPUs + filename = vector[2] # document filename + mat = vector[3] # the matrix for rendering + doc = fitz.open(filename) # open the document + num_pages = len(doc) # get number of pages + + # pages per segment: make sure that cpu * seg_size >= num_pages! + seg_size = int(num_pages / cpu + 1) + seg_from = idx * seg_size # our first page number + seg_to = min(seg_from + seg_size, num_pages) # last page number + + for i in range(seg_from, seg_to): # work through our page segment + page = doc[i] + # page.getText("rawdict") # use any page-related type of work here, eg + pix = page.getPixmap(alpha=False, matrix=mat) + # store away the result somewhere ... + # pix.writePNG("p-%i.png" % i) + print("Processed page numbers %i through %i" % (seg_from, seg_to - 1)) + + +if __name__ == "__main__": + t0 = mytime() # start a timer + filename = sys.argv[1] + mat = fitz.Matrix(0.2, 0.2) # the rendering matrix: scale down to 20% + cpu = cpu_count() + + # make vectors of arguments for the processes + vectors = [(i, cpu, filename, mat) for i in range(cpu)] + print("Starting %i processes for '%s'." % (cpu, filename)) + + pool = Pool() # make pool of 'cpu_count()' processes + pool.map(render_page, vectors, 1) # start processes passing each a vector + + t1 = mytime() # stop the timer + print("Total time %g seconds" % round(t1 - t0, 2)) + diff --git a/docs/new-annots.py b/docs/new-annots.py new file mode 100644 index 0000000..11a38d3 --- /dev/null +++ b/docs/new-annots.py @@ -0,0 +1,172 @@ +# -*- coding: utf-8 -*- +""" +------------------------------------------------------------------------------- +Demo script showing how annotations can be added to a PDF using PyMuPDF. + +It contains the following annotation types: +Caret, Text, FreeText, text markers (underline, strike-out, highlight, +squiggle), Circle, Square, Line, PolyLine, Polygon, FileAttachment, Stamp +and Redaction. +There is some effort to vary appearances by adding colors, line ends, +opacity, rotation, dashed lines, etc. + +Dependencies +------------ +PyMuPDF v1.17.0 +------------------------------------------------------------------------------- +""" +from __future__ import print_function + +import gc +import os +import sys + +import fitz + +print(fitz.__doc__) +if fitz.VersionBind.split(".") < ["1", "17", "0"]: + sys.exit("PyMuPDF v1.17.0+ is needed.") + +gc.set_debug(gc.DEBUG_UNCOLLECTABLE) + +highlight = "this text is highlighted" +underline = "this text is underlined" +strikeout = "this text is striked out" +squiggled = "this text is zigzag-underlined" +red = (1, 0, 0) +blue = (0, 0, 1) +gold = (1, 1, 0) +green = (0, 1, 0) + +displ = fitz.Rect(0, 50, 0, 50) +r = fitz.Rect(72, 72, 220, 100) +t1 = u"têxt üsès Lätiñ charß,\nEUR: €, mu: µ, super scripts: ²³!" + + +def print_descr(annot): + """Print a short description to the right of each annot rect.""" + annot.parent.insertText( + annot.rect.br + (10, -5), "%s annotation" % annot.type[1], color=red + ) + + +doc = fitz.open() +page = doc.newPage() + +page.setRotation(0) + +annot = page.addCaretAnnot(r.tl) +print_descr(annot) + +r = r + displ +annot = page.addFreetextAnnot( + r, + t1, + fontsize=10, + rotate=90, + text_color=blue, + fill_color=gold, + align=fitz.TEXT_ALIGN_CENTER, +) +annot.setBorder(width=0.3, dashes=[2]) +annot.update(text_color=blue, fill_color=gold) + +print_descr(annot) +r = annot.rect + displ + +annot = page.addTextAnnot(r.tl, t1) +print_descr(annot) + +# Adding text marker annotations: +# first insert a unique text, then search for it, then mark it +pos = annot.rect.tl + displ.tl +page.insertText( + pos, # insertion point + highlight, # inserted text + morph=(pos, fitz.Matrix(-5)), # rotate around insertion point +) +rl = page.searchFor(highlight, quads=True) # need a quad b/o tilted text +annot = page.addHighlightAnnot(rl[0]) +print_descr(annot) +pos = annot.rect.bl # next insertion point + +page.insertText(pos, underline, morph=(pos, fitz.Matrix(-10))) +rl = page.searchFor(underline, quads=True) +annot = page.addUnderlineAnnot(rl[0]) +print_descr(annot) +pos = annot.rect.bl + +page.insertText(pos, strikeout, morph=(pos, fitz.Matrix(-15))) +rl = page.searchFor(strikeout, quads=True) +annot = page.addStrikeoutAnnot(rl[0]) +print_descr(annot) +pos = annot.rect.bl + +page.insertText(pos, squiggled, morph=(pos, fitz.Matrix(-20))) +rl = page.searchFor(squiggled, quads=True) +annot = page.addSquigglyAnnot(rl[0]) +print_descr(annot) +pos = annot.rect.bl + +r = fitz.Rect(pos, pos.x + 75, pos.y + 35) + (0, 20, 0, 20) +annot = page.addPolylineAnnot([r.bl, r.tr, r.br, r.tl]) # 'Polyline' +annot.setBorder(width=0.3, dashes=[2]) +annot.setColors(stroke=blue, fill=green) +annot.setLineEnds(fitz.PDF_ANNOT_LE_CLOSED_ARROW, fitz.PDF_ANNOT_LE_R_CLOSED_ARROW) +annot.update(fill_color=(1, 1, 0)) +print_descr(annot) + +r += displ +annot = page.addPolygonAnnot([r.bl, r.tr, r.br, r.tl]) # 'Polygon' +annot.setBorder(width=0.3, dashes=[2]) +annot.setColors(stroke=blue, fill=gold) +annot.setLineEnds(fitz.PDF_ANNOT_LE_DIAMOND, fitz.PDF_ANNOT_LE_CIRCLE) +annot.update() +print_descr(annot) + +r += displ +annot = page.addLineAnnot(r.tr, r.bl) # 'Line' +annot.setBorder(width=0.3, dashes=[2]) +annot.setColors(stroke=blue, fill=gold) +annot.setLineEnds(fitz.PDF_ANNOT_LE_DIAMOND, fitz.PDF_ANNOT_LE_CIRCLE) +annot.update() +print_descr(annot) + +r += displ +annot = page.addRectAnnot(r) # 'Square' +annot.setBorder(width=1, dashes=[1, 2]) +annot.setColors(stroke=blue, fill=gold) +annot.update(opacity=0.5) +print_descr(annot) + +r += displ +annot = page.addCircleAnnot(r) # 'Circle' +annot.setBorder(width=0.3, dashes=[2]) +annot.setColors(stroke=blue, fill=gold) +annot.update() +print_descr(annot) + +r += displ +annot = page.addFileAnnot( + r.tl, b"just anything for testing", "testdata.txt" # 'FileAttachment' +) +print_descr(annot) # annot.rect + +r += displ +annot = page.addStampAnnot(r, stamp=10) # 'Stamp' +annot.setColors(stroke=green) +annot.update() +print_descr(annot) + +r += displ + (0, 0, 50, 10) +rc = page.insertTextbox( + r, + "This content will be removed upon applying the redaction.", + color=blue, + align=fitz.TEXT_ALIGN_CENTER, +) +annot = page.addRedactAnnot(r) +print_descr(annot) + +outfile = os.path.abspath(__file__).replace(".py", "-%i.pdf" % page.rotation) +doc.save(outfile, deflate=True) diff --git a/docs/outline.rst b/docs/outline.rst new file mode 100644 index 0000000..c72bf3c --- /dev/null +++ b/docs/outline.rst @@ -0,0 +1,73 @@ +.. _Outline: + +================ +Outline +================ + +*outline* (or "bookmark"), is a property of *Document*. If not *None*, it stands for the first outline item of the document. Its properties in turn define the characteristics of this item and also point to other outline items in "horizontal" or downward direction. The full tree of all outline items for e.g. a conventional table of contents (TOC) can be recovered by following these "pointers". + +============================ ================================================== +**Method / Attribute** **Short Description** +============================ ================================================== +:attr:`Outline.down` next item downwards +:attr:`Outline.next` next item same level +:attr:`Outline.page` page number (0-based) +:attr:`Outline.title` title +:attr:`Outline.uri` string further specifying the outline target +:attr:`Outline.isExternal` target is outside this document +:attr:`Outline.is_open` whether sub-outlines are open or collapsed +:attr:`Outline.isOpen` whether sub-outlines are open or collapsed +:attr:`Outline.dest` points to link destination details +============================ ================================================== + +**Class API** + +.. class:: Outline + + .. attribute:: down + + The next outline item on the next level down. Is *None* if the item has no kids. + + :type: :ref:`Outline` + + .. attribute:: next + + The next outline item at the same level as this item. Is *None* if this is the last one in its level. + + :type: `Outline` + + .. attribute:: page + + The page number (0-based) this bookmark points to. + + :type: int + + .. attribute:: title + + The item's title as a string or *None*. + + :type: str + + .. attribute:: is_open + + Or *isOpen* -- an indicator showing whether any sub-outlines should be expanded (*True*) or be collapsed (*False*). This information should be interpreted by PDF display software accordingly. + + :type: bool + + .. attribute:: isExternal + + A bool specifying whether the target is outside (*True*) of the current document. + + :type: bool + + .. attribute:: uri + + A string specifying the link target. The meaning of this property should be evaluated in conjunction with *isExternal*. The value may be *None*, in which case *isExternal == False*. If *uri* starts with *file://*, *mailto:*, or an internet resource name, *isExternal* is *True*. In all other cases *isExternal == False* and *uri* points to an internal location. In case of PDF documents, this should either be *#nnnn* to indicate a 1-based (!) page number *nnnn*, or a named location. The format varies for other document types, e.g. *uri = '../FixedDoc.fdoc#PG_21_LNK_84'* for page number 21 (1-based) in an XPS document. + + :type: str + + .. attribute:: dest + + The link destination details object. + + :type: :ref:`linkDest` diff --git a/docs/page.rst b/docs/page.rst new file mode 100644 index 0000000..d1189d8 --- /dev/null +++ b/docs/page.rst @@ -0,0 +1,1236 @@ +.. _Page: + +================ +Page +================ + +Class representing a document page. A page object is created by :meth:`Document.loadPage` or, equivalently, via indexing the document like *doc[n]* - it has no independent constructor. + +There is a parent-child relationship between a document and its pages. If the document is closed or deleted, all page objects (and their respective children, too) in existence will become unusable ("orphaned"): If a page property or method is being used, an exception is raised. + +Several page methods have a :ref:`Document` counterpart for convenience. At the end of this chapter you will find a synopsis. + +Modifying Pages +--------------- +Changing page properties and adding or changing page content is available for PDF documents only. + +In a nutshell, this is what you can do with PyMuPDF: + +* Modify page rotation and the visible part ("CropBox") of the page. +* Insert images, other PDF pages, text and simple geometrical objects. +* Add annotations and form fields. + +.. note:: + + Methods require coordinates (points, rectangles) to put content in desired places. Please be aware that since v1.17.0 these coordinates **must always** be provided relative to the **unrotated** page. The reverse is also true: expcept :attr:`Page.rect`, resp. :meth:`Page.bound` (both *reflect* when the page is rotated), all coordinates returned by methods and attributes pertain to the unrotated page. + + So the returned value of e.g. :meth:`Page.getImageBbox` will not change if you do a :meth:`Page.setRotation`. The same is true for coordinates returned by :meth:`Page.getText`, annotation rectangles, and so on. If you want to find out, where an object is located in **rotated coordinates**, multiply the coordinates with :attr:`Page.rotationMatrix`. There also is its inverse, :attr:`Page.derotationMatrix`, which you can use when interfacing with other readers, which may behave differently in this respect. + +.. note:: + + If you add or update annotations, links or form fields on the page and immediately afterwards need to work with them (i.e. **without leaving the page**), you should reload the page using :meth:`Document.reload_page` before referring to these new or updated items. + + This ensures all your changes have been fully applied to PDF structures, so can safely create Pixmaps or successfully iterate over annotations, links and form fields. + +================================= ======================================================= +**Method / Attribute** **Short Description** +================================= ======================================================= +:meth:`Page.addCaretAnnot` PDF only: add a caret annotation +:meth:`Page.addCircleAnnot` PDF only: add a circle annotation +:meth:`Page.addFileAnnot` PDF only: add a file attachment annotation +:meth:`Page.addFreetextAnnot` PDF only: add a text annotation +:meth:`Page.addHighlightAnnot` PDF only: add a "highlight" annotation +:meth:`Page.addInkAnnot` PDF only: add an ink annotation +:meth:`Page.addLineAnnot` PDF only: add a line annotation +:meth:`Page.addPolygonAnnot` PDF only: add a polygon annotation +:meth:`Page.addPolylineAnnot` PDF only: add a multi-line annotation +:meth:`Page.addRectAnnot` PDF only: add a rectangle annotation +:meth:`Page.addRedactAnnot` PDF only: add a redaction annotation +:meth:`Page.addSquigglyAnnot` PDF only: add a "squiggly" annotation +:meth:`Page.addStampAnnot` PDF only: add a "rubber stamp" annotation +:meth:`Page.addStrikeoutAnnot` PDF only: add a "strike-out" annotation +:meth:`Page.addTextAnnot` PDF only: add a comment +:meth:`Page.addUnderlineAnnot` PDF only: add an "underline" annotation +:meth:`Page.addWidget` PDF only: add a PDF Form field +:meth:`Page.annot_names` PDF only: a list of annotation and widget names +:meth:`Page.annots` return a generator over the annots on the page +:meth:`Page.apply_redactions` PDF olny: process the redactions of the page +:meth:`Page.bound` rectangle of the page +:meth:`Page.deleteAnnot` PDF only: delete an annotation +:meth:`Page.deleteLink` PDF only: delete a link +:meth:`Page.drawBezier` PDF only: draw a cubic Bezier curve +:meth:`Page.drawCircle` PDF only: draw a circle +:meth:`Page.drawCurve` PDF only: draw a special Bezier curve +:meth:`Page.drawLine` PDF only: draw a line +:meth:`Page.drawOval` PDF only: draw an oval / ellipse +:meth:`Page.drawPolyline` PDF only: connect a point sequence +:meth:`Page.drawRect` PDF only: draw a rectangle +:meth:`Page.drawSector` PDF only: draw a circular sector +:meth:`Page.drawSquiggle` PDF only: draw a squiggly line +:meth:`Page.drawZigzag` PDF only: draw a zig-zagged line +:meth:`Page.getFontList` PDF only: get list of used fonts +:meth:`Page.getImageBbox` PDF only: get bbox of embedded image +:meth:`Page.getImageList` PDF only: get list of used images +:meth:`Page.getLinks` get all links +:meth:`Page.getPixmap` create a page image in raster format +:meth:`Page.getSVGimage` create a page image in SVG format +:meth:`Page.getText` extract the page's text +:meth:`Page.getTextPage` create a TextPage for the page +:meth:`Page.insertFont` PDF only: insert a font for use by the page +:meth:`Page.insertImage` PDF only: insert an image +:meth:`Page.insertLink` PDF only: insert a link +:meth:`Page.insertText` PDF only: insert text +:meth:`Page.insertTextbox` PDF only: insert a text box +:meth:`Page.links` return a generator of the links on the page +:meth:`Page.loadAnnot` PDF only: load a specific annotation +:meth:`Page.loadLinks` return the first link on a page +:meth:`Page.newShape` PDF only: create a new :ref:`Shape` +:meth:`Page.searchFor` search for a string +:meth:`Page.setCropBox` PDF only: modify the visible page +:meth:`Page.setMediaBox` PDF only: modify the mediabox +:meth:`Page.setRotation` PDF only: set page rotation +:meth:`Page.showPDFpage` PDF only: display PDF page image +:meth:`Page.updateLink` PDF only: modify a link +:meth:`Page.widgets` return a generator over the fields on the page +:meth:`Page.writeText` write one or more :ref:`Textwriter` objects +:attr:`Page.CropBox` the page's :data:`CropBox` +:attr:`Page.CropBoxPosition` displacement of the :data:`CropBox` +:attr:`Page.firstAnnot` first :ref:`Annot` on the page +:attr:`Page.firstLink` first :ref:`Link` on the page +:attr:`Page.firstWidget` first widget (form field) on the page +:attr:`Page.MediaBox` the page's :data:`MediaBox` +:attr:`Page.MediaBoxSize` bottom-right point of :data:`MediaBox` +:attr:`Page.derotationMatrix` PDF only: get coordinates in unrotated page space +:attr:`Page.rotationMatrix` PDF only: get coordinates in rotated page space +:attr:`Page.transformationMatrix` PDF only: translate between PDF and MuPDF space +:attr:`Page.number` page number +:attr:`Page.parent` owning document object +:attr:`Page.rect` rectangle of the page +:attr:`Page.rotation` PDF only: page rotation +:attr:`Page.xref` PDF only: page :data:`xref` +================================= ======================================================= + +**Class API** + +.. class:: Page + + .. method:: bound() + + Determine the rectangle of the page. Same as property :attr:`Page.rect` below. For PDF documents this **usually** also coincides with :data:`MediaBox` and :data:`CropBox`, but not always. For example, if the page is rotated, then this is reflected by this method -- the :attr:`Page.CropBox` however will not change. + + :rtype: :ref:`Rect` + + .. method:: addCaretAnnot(point) + + *(New in version 1.16.0)* + + PDF only: Add a caret icon. A caret annotation is a visual symbol normally used to indicate the presence of text edits on the page. + + :arg point_like point: the top left point of a 20 x 20 rectangle containing the MuPDF-provided icon. + + :rtype: :ref:`Annot` + :returns: the created annotation. + + .. image:: images/img-caret-annot.jpg + :scale: 70 + + .. method:: addTextAnnot(point, text, icon="Note") + + PDF only: Add a comment icon ("sticky note") with accompanying text. Only the icon is visible, the accompanying text is hidden and can be visualized by many PDF viewers by hovering the mouse over the symbol. + + :arg point_like point: the top left point of a 20 x 20 rectangle containing the MuPDF-provided "note" icon. + + :arg str text: the commentary text. This will be shown on double clicking or hovering over the icon. May contain any Latin characters. + :arg str icon: *(new in version 1.16.0)* choose one of "Note" (default), "Comment", "Help", "Insert", "Key", "NewParagraph", "Paragraph" as the visual symbol for the embodied text [#f4]_. + + :rtype: :ref:`Annot` + :returns: the created annotation. + + .. index:: + pair: color; addFreetextAnnot + pair: fontname; addFreetextAnnot + pair: fontsize; addFreetextAnnot + pair: rect; addFreetextAnnot + pair: rotate; addFreetextAnnot + pair: align; addFreetextAnnot + + .. method:: addFreetextAnnot(rect, text, fontsize=12, fontname="helv", text_color=0, fill_color=1, rotate=0, align=TEXT_ALIGN_LEFT) + + PDF only: Add text in a given rectangle. + + :arg rect_like rect: the rectangle into which the text should be inserted. Text is automatically wrapped to a new line at box width. Lines not fitting into the box will be invisible. + + :arg str text: the text. *(New in v1.17.0)* May contain any mixture of Latin, Greek, Cyrillic, Chinese, Japanese and Korean characters. The respective required font is automatically determined. + :arg float fontsize: the font size. Default is 12. + :arg str fontname: the font name. Default is "Helv". Accepted alternatives are "Cour", "TiRo", "ZaDb" and "Symb". The name may be abbreviated to the first two characters, like "Co" for "Cour". Lower case is also accepted. *(Changed in v1.16.0)* Bold or italic variants of the fonts are **no longer accepted**. A user-contributed script provides a circumvention for this restriction -- see section *Using Buttons and JavaScript* in chapter :ref:`FAQ`. *(New in v1.17.0)* The actual font to use is now determined on a by-character level, and all required fonts (or sub-fonts) are automatically included. Therefore, you should rarely ever need to care about this parameter and let it default (except you insist on a serifed font for your non-CJK text parts). + :arg sequence,float text_color: *(new in version 1.16.0)* the text color. Default is black. + + :arg sequence,float fill_color: *(new in version 1.16.0)* the fill color. Default is white. + :arg int align: *(new in version 1.17.0)* text alignment, one of TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT - justify is not supported. + + + :arg int rotate: the text orientation. Accepted values are 0, 90, 270, invalid entries are set to zero. + + :rtype: :ref:`Annot` + :returns: the created annotation. Color properties **can only be changed** using special parameters of :meth:`Annot.update`. There, you can also set a border color different from the text color. + + .. method:: addFileAnnot(pos, buffer, filename, ufilename=None, desc=None, icon="PushPin") + + PDF only: Add a file attachment annotation with a "PushPin" icon at the specified location. + + :arg point_like pos: the top-left point of a 18x18 rectangle containing the MuPDF-provided "PushPin" icon. + + :arg bytes,bytearray,BytesIO buffer: the data to be stored (actual file content, any data, etc.). + + Changed in version 1.14.13 *io.BytesIO* is now also supported. + + :arg str filename: the filename to associate with the data. + :arg str ufilename: the optional PDF unicode version of filename. Defaults to filename. + :arg str desc: an optional description of the file. Defaults to filename. + :arg str icon: *(new in version 1.16.0)* choose one of "PushPin" (default), "Graph", "Paperclip", "Tag" as the visual symbol for the attached data [#f4]_. + + :rtype: :ref:`Annot` + :returns: the created annotation. Use methods of :ref:`Annot` to make any changes. + + .. method:: addInkAnnot(list) + + PDF only: Add a "freehand" scribble annotation. + + :arg sequence list: a list of one or more lists, each containing :data:`point_like` items. Each item in these sublists is interpreted as a :ref:`Point` through which a connecting line is drawn. Separate sublists thus represent separate drawing lines. + + :rtype: :ref:`Annot` + :returns: the created annotation in default appearance (black line of width 1). Use annotation methods with a subsequent :meth:`Annot.update` to modify. + + .. method:: addLineAnnot(p1, p2) + + PDF only: Add a line annotation. + + :arg point_like p1: the starting point of the line. + + :arg point_like p2: the end point of the line. + + :rtype: :ref:`Annot` + :returns: the created annotation. It is drawn with line color black and line width 1. The **rectangle** is automatically created to contain both points, each one surrounded by a circle of radius 3 * line width to make room for any line end symbols. + + .. method:: addRectAnnot(rect) + + .. method:: addCircleAnnot(rect) + + PDF only: Add a rectangle, resp. circle annotation. + + :arg rect_like rect: the rectangle in which the circle or rectangle is drawn, must be finite and not empty. If the rectangle is not equal-sided, an ellipse is drawn. + + :rtype: :ref:`Annot` + :returns: the created annotation. It is drawn with line color red, no fill color and line width 1. + + .. method:: addRedactAnnot(quad, text=None, fontname=None, fontsize=11, align=TEXT_ALIGN_LEFT, fill=(1, 1, 1), text_color=(0, 0, 0), cross_out=True) + + PDF only: *(new in version 1.16.11)* Add a redaction annotation. A redaction annotation identifies content to be removed from the document. Adding such an annotation is the first of two steps. It makes visible what will be removed in the subsequent step, :meth:`Page.apply_redactions`. + + :arg quad_like,rect_like quad: specifies the (rectangular) area to be removed which is always equal to the annotation rectangle. This may be a :data:`rect_like` or :data:`quad_like` object. If a quad is specified, then the envelopping rectangle is taken. + + :arg str text: *(New in v1.16.12)* text to be placed in the rectangle after applying the redaction (and thus removing old content). + + :arg str fontname: *(New in v1.16.12)* the font to use when *text* is given, otherwise ignored. The same rules apply as for :meth:`Page.insertTextbox` -- which is the method :meth:`Page.apply_redactions` internally invokes. The replacement text will be **vertically centered**, if this is one of the CJK or :ref:`Base-14-Fonts`. + + .. note:: + For an **existing** font of the page, use its reference name as *fontname* (*item[4]* of its entry in :meth:`Page.getFontList`). To use a new, non-builtin font, proceed as follows:: + + page.insertText(point, # anywhere, but outside all redaction rectangles + "somthing", # some non-empty string + fontname="newname", # new, unused reference name + fontfile="...", # desired font file + render_mode=3, # makes the text invisible + ) + page.addRedactAnnot(..., fontname="newname") + + :arg float fontsize: *(New in v1.16.12)* the fontsize to use for the replacing text. If the text is too large to fit, several insertion attempts will be made, gradually reducing this value down to 4. If then the text will still not fit, no text insertion will take place at all. + + :arg int align: *(New in v1.16.12)* the horizontal alignment for the replacing text. See :meth:`insertTextbox` for available values. The vertical alignment is (approximately) centered if a PDF built-in font is used (CJK or :ref:`Base-14-Fonts`). + + :arg sequence fill: *(New in v1.16.12)* the fill color of the rectangle **after applying** the redaction. The default is *white = (1, 1, 1)*, which is also taken if *None* is specified. *(Changed in v1.16.13)* To suppress a fill color alltogether, specify *False*. In this cases the rectangle remains transparent. + + :arg sequence text_color: *(New in v1.16.12)* the color of the replacing text. Default is *black = (0, 0, 0)*. + + :arg bool cross_out: *(new in v1.17.2)* add two diagonal lines to the annotation rectangle. + + :rtype: :ref:`Annot` + :returns: the created annotation. *(Changed in v1.17.2)* Its standard appearance looks like a red rectangle (no fill color), optionally showing two diagonal lines. Colors, line width, dashing, opacity and blend mode can now be set and applied via :meth:`Annot.update` like with other annotations. + + .. image:: images/img-redact.jpg + + .. method:: addPolylineAnnot(points) + + .. method:: addPolygonAnnot(points) + + PDF only: Add an annotation consisting of lines which connect the given points. A **Polygon's** first and last points are automatically connected, which does not happen for a **PolyLine**. The **rectangle** is automatically created as the smallest rectangle containing the points, each one surrounded by a circle of radius 3 (= 3 * line width). The following shows a 'PolyLine' that has been modified with colors and line ends. + + :arg list points: a list of :data:`point_like` objects. + + :rtype: :ref:`Annot` + :returns: the created annotation. It is drawn with line color black, no fill color and line width 1. Use methods of :ref:`Annot` to make any changes to achieve something like this: + + .. image:: images/img-polyline.png + :scale: 70 + + .. method:: addUnderlineAnnot(quads=None, start=None, stop=None, clip=None) + + .. method:: addStrikeoutAnnot(quads=None, start=None, stop=None, clip=None) + + .. method:: addSquigglyAnnot(quads=None, start=None, stop=None, clip=None) + + .. method:: addHighlightAnnot(quads=None, start=None, stop=None, clip=None) + + PDF only: These annotations are normally used for **marking text** which has previously been somehow located (for example via :meth:`Page.searchFor`). But this is not required: you are free to "mark" just anything. + + Standard colors are chosen per annotation type: **yellow** for highlighting, **red** for strike out, **green** for underlining, and **magenta** for wavy underlining. + + The methods convert the arguments into a list of :ref:`Quad` objects. The **annotation** rectangle is then calculated to envelop all these quadrilaterals. + + .. note:: :meth:`searchFor` delivers a list of either rectangles or quadrilaterals. Such a list can be directly used as parameter for these annotation types and will deliver **one common** annotation for all occurrences of the search string:: + + >>> quads = page.searchFor("pymupdf", hit_max=100, quads=True) + >>> page.addHighlightAnnot(quads) + + :arg rect_like,quad_like,list,tuple quads: *(Changed in v1.14.20)* the location(s) -- rectangle(s) or quad(s) -- to be marked. A list or tuple must consist of :data:`rect_like` or :data:`quad_like` items (or even a mixture of either). Every item must be finite, convex and not empty (as applicable). *(Changed in v1.16.14)* **Set this parameter to** *None* if you want to use the following arguments. + :arg point_like start: *(New in v1.16.14)* start text marking at this point. Defaults to the top-left point of *clip*. + :arg point_like stop: *(New in v1.16.14)* stop text marking at this point. Defaults to the bottom-right point of *clip*. + :arg rect_like clip: *(New in v1.16.14)* only consider text lines intersecting this area. Defaults to the page rectangle. + + :rtype: :ref:`Annot` or *(changed in v1.16.14)* *None* + :returns: the created annotation. *(Changed in v1.16.14)* If *quads* is an empty list, **no annotation** is created. To change colors, set the "stroke" color accordingly (:meth:`Annot.setColors`) and then perform an :meth:`Annot.update`. + + .. note:: Starting with v1.16.14 you can use parameters *start*, *stop* and *clip* to highlight consecutive lines between the points *start* and *stop*. Make use of *clip* to further reduce the selected line bboxes and thus deal with e.g. multi-column pages. The following multi-line highlight on a page with three text columnbs was created by specifying the two red points and setting clip accordingly. + + .. image:: images/img-markers.jpg + :scale: 100 + + .. method:: addStampAnnot(rect, stamp=0) + + PDF only: Add a "rubber stamp" like annotation to e.g. indicate the document's intended use ("DRAFT", "CONFIDENTIAL", etc.). + + :arg rect_like rect: rectangle where to place the annotation. + + :arg int stamp: id number of the stamp text. For available stamps see :ref:`StampIcons`. + + .. note:: + + * The stamp's text and its border line will automatically be sized and be put horizontally and vertically centered in the given rectangle. :attr:`Annot.rect` is automatically calculated to fit the given **width** and will usually be smaller than this parameter. + * The font chosen is "Times Bold" and the text will be upper case. + * The appearance can be changed using :meth:`Annot.setOpacity` and by setting the "stroke" color (no "fill" color supported). + * This can be used to create watermark images: on a temporary PDF page create a stamp annotation with a low opacity value, make a pixmap from it with *alpha=True* (and potentially also rotate it), discard the temporary PDF page and use the pixmap with :meth:`insertImage` for your target PDF. + + + .. image :: images/img-stampannot.jpg + :scale: 80 + + .. method:: addWidget(widget) + + PDF only: Add a PDF Form field ("widget") to a page. This also **turns the PDF into a Form PDF**. Because of the large amount of different options available for widgets, we have developed a new class :ref:`Widget`, which contains the possible PDF field attributes. It must be used for both, form field creation and updates. + + :arg widget: a :ref:`Widget` object which must have been created upfront. + :type widget: :ref:`Widget` + + :returns: a widget annotation. + + .. method:: deleteAnnot(annot) + + PDF only: Delete the specified annotation from the page and return the next one. + + Changed in version 1.16.6 The removal will now include any bound 'Popup' or response annotations and related objects. + + :arg annot: the annotation to be deleted. + :type annot: :ref:`Annot` + + :rtype: :ref:`Annot` + :returns: the annotation following the deleted one. Please remember that physical removal will take place only with saving to a new file with a positive garbage collection option. + + .. method:: apply_redactions() + + PDF only: *(New in version 1.16.11)* Remove all **text content** contained in any redaction rectangle. + + *(Changed in v1.16.12)* The previous *mark* parameter is gone. Instead, the respective rectangles are filled with the individual *fill* color of each redaction annotation. If a *text* was given in the annotation, then :meth:`insertTextbox` is invoked to insert it, using parameters provided with the redaction. + + **This method applies and then deletes all redaction annotations from the page.** + + :returns: *True* if at least one redaction annotation has been processed, *False* otherwise. + + .. note:: + Text contained in a redaction rectangle will be **physically** removed from the page and will no longer appear in e.g. text extractions or anywhere else. Other annotations are unaffected. + + Images and links will also **physically** be removed from the page. For an image, overlapping parts will be blanked-out. Links will always be completely removed. + + Text removal is done by character: A character is removed if its bbox has a **non-empty intersection** with a redaction *(changed in v1.17)*. + + Redactions are an easy way to replace single words in a PDF, or to just physically remove them from the PDF: locate the word "secret" using some text extraction or search method and insert a redaction using "xxxxxx" as replacement text for each occurrence. + + * Be wary if the replacement is longer than the original -- this may lead to an awkward appearance, line breaks or no new text at all. + + * For a number of reasons, the new text may not exactly be positioned on the same line like the old one -- especially true if the replacement font was not one of CJK or :ref:`Base-14-Fonts`. + + .. method:: deleteLink(linkdict) + + PDF only: Delete the specified link from the page. The parameter must be an **original item** of :meth:`getLinks()` (see below). The reason for this is the dictionary's *"xref"* key, which identifies the PDF object to be deleted. + + :arg dict linkdict: the link to be deleted. + + .. method:: insertLink(linkdict) + + PDF only: Insert a new link on this page. The parameter must be a dictionary of format as provided by :meth:`getLinks()` (see below). + + :arg dict linkdict: the link to be inserted. + + .. method:: updateLink(linkdict) + + PDF only: Modify the specified link. The parameter must be a (modified) **original item** of :meth:`getLinks()` (see below). The reason for this is the dictionary's *"xref"* key, which identifies the PDF object to be changed. + + :arg dict linkdict: the link to be modified. + + .. method:: getLinks() + + Retrieves **all** links of a page. + + :rtype: list + :returns: A list of dictionaries. For a description of the dictionary entries see below. Always use this or the :meth:`Page.links` method if you intend to make changes to the links of a page. + + .. method:: links(kinds=None) + + *(New in version 1.16.4)* + + Return a generator over the page's links. The results equal the entries of :meth:`Page.getLinks`. + + :arg sequence kinds: a sequence of integers to down-select to one or more link kinds. Default is all links. Example: *kinds=(fitz.LINK_GOTO,)* will only return internal links. + + :rtype: generator + :returns: an entry of :meth:`Page.getLinks()` for each iteration. + + .. method:: annots(types=None) + + *(New in version 1.16.4)* + + Return a generator over the page's annotations. + + :arg sequence types: a sequence of integers to down-select to one or annotation types. Default is all annotations. Example: *types=(fitz.PDF_ANNOT_FREETEXT, fitz.PDF_ANNOT_TEXT)* will only return 'FreeText' and 'Text' annotations. + + :rtype: generator + :returns: an :ref:`Annot` for each iteration. + + .. method:: widgets(types=None) + + *(New in version 1.16.4)* + + Return a generator over the page's form fields. + + :arg sequence types: a sequence of integers to down-select to one or more widget types. Default is all form fields. Example: *types=(fitz.PDF_WIDGET_TYPE_TEXT,)* will only return 'Text' fields. + + :rtype: generator + :returns: a :ref:`Widget` for each iteration. + + + .. method:: writeText(rect=None, writers=None, overlay=True, color=None, opacity=None, keep_proportion=True, rotate=0) + + *(New in version 1.16.18)* + + PDF only: Write the text of one or more :ref:`Textwriter` ojects to the page. + + :arg rect_like rect: where to place the text. If omitted, the rectangle union of the text writers is used. + :arg sequence writers: a non-empty tuple / list of :ref:`TextWriter` objects or a single :ref:`TextWriter`. + :arg float opacity: set transparency, overwrites resp. value in the text writers. + :arg sequ color: set the text color, overwrites resp. value in the text writers. + :arg bool overlay: put the text in foreground or background. + :arg bool keep_proportion: maintain the aspect ratio. + :arg float rotate: rotate the text by an arbitrary angle. + + .. note:: Parameters overlay, keep_proportion and rotate have the same meaning as in :ref:`showPDFpage`. + + + .. index:: + pair: border_width; insertText + pair: color; insertText + pair: encoding; insertText + pair: fill; insertText + pair: fontfile; insertText + pair: fontname; insertText + pair: fontsize; insertText + pair: morph; insertText + pair: overlay; insertText + pair: render_mode; insertText + pair: rotate; insertText + + .. method:: insertText(point, text, fontsize=11, fontname="helv", fontfile=None, idx=0, color=None, fill=None, render_mode=0, border_width=1, encoding=TEXT_ENCODING_LATIN, rotate=0, morph=None, overlay=True) + + PDF only: Insert text starting at :data:`point_like` *point*. See :meth:`Shape.insertText`. + + .. index:: + pair: align; insertTextbox + pair: border_width; insertTextbox + pair: color; insertTextbox + pair: encoding; insertTextbox + pair: expandtabs; insertTextbox + pair: fill; insertTextbox + pair: fontfile; insertTextbox + pair: fontname; insertTextbox + pair: fontsize; insertTextbox + pair: morph; insertTextbox + pair: overlay; insertTextbox + pair: render_mode; insertTextbox + pair: rotate; insertTextbox + + .. method:: insertTextbox(rect, buffer, fontsize=11, fontname="helv", fontfile=None, idx=0, color=None, fill=None, render_mode=0, border_width=1, encoding=TEXT_ENCODING_LATIN, expandtabs=8, align=TEXT_ALIGN_LEFT, charwidths=None, rotate=0, morph=None, overlay=True) + + PDF only: Insert text into the specified :data:`rect_like` *rect*. See :meth:`Shape.insertTextbox`. + + .. index:: + pair: closePath; drawLine + pair: color; drawLine + pair: dashes; drawLine + pair: fill; drawLine + pair: lineCap; drawLine + pair: lineJoin; drawLine + pair: lineJoin; drawLine + pair: morph; drawLine + pair: overlay; drawLine + pair: width; drawLine + + .. method:: drawLine(p1, p2, color=None, width=1, dashes=None, lineCap=0, lineJoin=0, overlay=True, morph=None) + + PDF only: Draw a line from *p1* to *p2* (:data:`point_like` \s). See :meth:`Shape.drawLine`. + + .. index:: + pair: breadth; drawZigzag + pair: closePath; drawZigzag + pair: color; drawZigzag + pair: dashes; drawZigzag + pair: fill; drawZigzag + pair: lineCap; drawZigzag + pair: lineJoin; drawZigzag + pair: morph; drawZigzag + pair: overlay; drawZigzag + pair: width; drawZigzag + + .. method:: drawZigzag(p1, p2, breadth=2, color=None, width=1, dashes=None, lineCap=0, lineJoin=0, overlay=True, morph=None) + + PDF only: Draw a zigzag line from *p1* to *p2* (:data:`point_like` \s). See :meth:`Shape.drawZigzag`. + + .. index:: + pair: breadth; drawSquiggle + pair: closePath; drawSquiggle + pair: color; drawSquiggle + pair: dashes; drawSquiggle + pair: fill; drawSquiggle + pair: lineCap; drawSquiggle + pair: lineJoin; drawSquiggle + pair: morph; drawSquiggle + pair: overlay; drawSquiggle + pair: width; drawSquiggle + + .. method:: drawSquiggle(p1, p2, breadth=2, color=None, width=1, dashes=None, lineCap=0, lineJoin=0, overlay=True, morph=None) + + PDF only: Draw a squiggly (wavy, undulated) line from *p1* to *p2* (:data:`point_like` \s). See :meth:`Shape.drawSquiggle`. + + .. index:: + pair: closePath; drawCircle + pair: color; drawCircle + pair: dashes; drawCircle + pair: fill; drawCircle + pair: lineCap; drawCircle + pair: lineJoin; drawCircle + pair: morph; drawCircle + pair: overlay; drawCircle + pair: width; drawCircle + + .. method:: drawCircle(center, radius, color=None, fill=None, width=1, dashes=None, lineCap=0, lineJoin=0, overlay=True, morph=None) + + PDF only: Draw a circle around *center* (:data:`point_like`) with a radius of *radius*. See :meth:`Shape.drawCircle`. + + .. index:: + pair: closePath; drawOval + pair: color; drawOval + pair: dashes; drawOval + pair: fill; drawOval + pair: lineCap; drawOval + pair: lineJoin; drawOval + pair: morph; drawOval + pair: overlay; drawOval + pair: width; drawOval + + .. method:: drawOval(quad, color=None, fill=None, width=1, dashes=None, lineCap=0, lineJoin=0, overlay=True, morph=None) + + PDF only: Draw an oval (ellipse) within the given :data:`rect_like` or :data:`quad_like`. See :meth:`Shape.drawOval`. + + .. index:: + pair: closePath; drawSector + pair: color; drawSector + pair: dashes; drawSector + pair: fill; drawSector + pair: fullSector; drawSector + pair: lineCap; drawSector + pair: lineJoin; drawSector + pair: morph; drawSector + pair: overlay; drawSector + pair: width; drawSector + + .. method:: drawSector(center, point, angle, color=None, fill=None, width=1, dashes=None, lineCap=0, lineJoin=0, fullSector=True, overlay=True, closePath=False, morph=None) + + PDF only: Draw a circular sector, optionally connecting the arc to the circle's center (like a piece of pie). See :meth:`Shape.drawSector`. + + .. index:: + pair: closePath; drawPolyline + pair: color; drawPolyline + pair: dashes; drawPolyline + pair: fill; drawPolyline + pair: lineCap; drawPolyline + pair: lineJoin; drawPolyline + pair: morph; drawPolyline + pair: overlay; drawPolyline + pair: width; drawPolyline + + .. method:: drawPolyline(points, color=None, fill=None, width=1, dashes=None, lineCap=0, lineJoin=0, overlay=True, closePath=False, morph=None) + + PDF only: Draw several connected lines defined by a sequence of :data:`point_like` \s. See :meth:`Shape.drawPolyline`. + + + .. index:: + pair: closePath; drawBezier + pair: color; drawBezier + pair: dashes; drawBezier + pair: fill; drawBezier + pair: lineCap; drawBezier + pair: lineJoin; drawBezier + pair: morph; drawBezier + pair: overlay; drawBezier + pair: width; drawBezier + + .. method:: drawBezier(p1, p2, p3, p4, color=None, fill=None, width=1, dashes=None, lineCap=0, lineJoin=0, overlay=True, closePath=False, morph=None) + + PDF only: Draw a cubic Bézier curve from *p1* to *p4* with the control points *p2* and *p3* (all are :data`point_like` \s). See :meth:`Shape.drawBezier`. + + .. index:: + pair: closePath; drawCurve + pair: color; drawCurve + pair: dashes; drawCurve + pair: fill; drawCurve + pair: lineCap; drawCurve + pair: lineJoin; drawCurve + pair: morph; drawCurve + pair: overlay; drawCurve + pair: width; drawCurve + + .. method:: drawCurve(p1, p2, p3, color=None, fill=None, width=1, dashes=None, lineCap=0, lineJoin=0, overlay=True, closePath=False, morph=None) + + PDF only: This is a special case of *drawBezier()*. See :meth:`Shape.drawCurve`. + + .. index:: + pair: closePath; drawRect + pair: color; drawRect + pair: dashes; drawRect + pair: fill; drawRect + pair: lineCap; drawRect + pair: lineJoin; drawRect + pair: morph; drawRect + pair: overlay; drawRect + pair: width; drawRect + + .. method:: drawRect(rect, color=None, fill=None, width=1, dashes=None, lineCap=0, lineJoin=0, overlay=True, morph=None) + + PDF only: Draw a rectangle. See :meth:`Shape.drawRect`. + + .. note:: An efficient way to background-color a PDF page with the old Python paper color is + + >>> col = fitz.utils.getColor("py_color") + >>> page.drawRect(page.rect, color=col, fill=col, overlay=False) + + .. index:: + pair: encoding; insertFont + pair: fontbuffer; insertFont + pair: fontfile; insertFont + pair: fontname; insertFont + pair: set_simple; insertFont + + .. method:: insertFont(fontname="helv", fontfile=None, fontbuffer=None, set_simple=False, encoding=TEXT_ENCODING_LATIN) + + PDF only: Add a new font to be used by text output methods and return its :data:`xref`. If not already present in the file, the font definition will be added. Supported are the built-in :data:`Base14_Fonts` and the CJK fonts via **"reserved"** fontnames. Fonts can also be provided as a file path or a memory area containing the image of a font file. + + :arg str fontname: The name by which this font shall be referenced when outputting text on this page. In general, you have a "free" choice here (but consult the :ref:`AdobeManual`, page 56, section 3.2.4 for a formal description of building legal PDF names). However, if it matches one of the :data:`Base14_Fonts` or one of the CJK fonts, *fontfile* and *fontbuffer* **are ignored**. + + In other words, you cannot insert a font via *fontfile* / *fontbuffer* and also give it a reserved *fontname*. + + .. note:: A reserved fontname can be specified in any mixture of upper or lower case and still match the right built-in font definition: fontnames "helv", "Helv", "HELV", "Helvetica", etc. all lead to the same font definition "Helvetica". But from a :ref:`Page` perspective, these are **different references**. You can exploit this fact when using different *encoding* variants (Latin, Greek, Cyrillic) of the same font on a page. + + :arg str fontfile: a path to a font file. If used, *fontname* must be **different from all reserved names**. + + :arg bytes/bytearray fontbuffer: the memory image of a font file. If used, *fontname* must be **different from all reserved names**. This parameter would typically be used to transfer fonts between different pages of the same or different PDFs. + + :arg int set_simple: applicable for *fontfile* / *fontbuffer* cases only: enforce treatment as a "simple" font, i.e. one that only uses character codes up to 255. + + :arg int encoding: applicable for the "Helvetica", "Courier" and "Times" sets of :data:`Base14_Fonts` only. Select one of the available encodings Latin (0), Cyrillic (2) or Greek (1). Only use the default (0 = Latin) for "Symbol" and "ZapfDingBats". + + :rytpe: int + :returns: the :data:`xref` of the installed font. + + .. note:: Built-in fonts will not lead to the inclusion of a font file. So the resulting PDF file will remain small. However, your PDF viewer software is responsible for generating an appropriate appearance -- and there **exist** differences on whether or how each one of them does this. This is especially true for the CJK fonts. But also Symbol and ZapfDingbats are incorrectly handled in some cases. Following are the **Font Names** and their correspondingly installed **Base Font** names: + + **Base-14 Fonts** [#f1]_ + + ============= ============================ ========================================= + **Font Name** **Installed Base Font** **Comments** + ============= ============================ ========================================= + helv Helvetica normal + heit Helvetica-Oblique italic + hebo Helvetica-Bold bold + hebi Helvetica-BoldOblique bold-italic + cour Courier normal + coit Courier-Oblique italic + cobo Courier-Bold bold + cobi Courier-BoldOblique bold-italic + tiro Times-Roman normal + tiit Times-Italic italic + tibo Times-Bold bold + tibi Times-BoldItalic bold-italic + symb Symbol [#f3]_ + zadb ZapfDingbats [#f3]_ + ============= ============================ ========================================= + + **CJK Fonts** [#f2]_ (China, Japan, Korea) + + ============= ============================ ========================================= + **Font Name** **Installed Base Font** **Comments** + ============= ============================ ========================================= + china-s Heiti simplified Chinese + china-ss Song simplified Chinese (serif) + china-t Fangti traditional Chinese + china-ts Ming traditional Chinese (serif) + japan Gothic Japanese + japan-s Mincho Japanese (serif) + korea Dotum Korean + korea-s Batang Korean (serif) + ============= ============================ ========================================= + + .. index:: + pair: filename; insertImage + pair: keep_proportion; insertImage + pair: overlay; insertImage + pair: pixmap; insertImage + pair: rotate; insertImage + pair: stream; insertImage + + .. method:: insertImage(rect, filename=None, pixmap=None, stream=None, rotate=0, keep_proportion=True, overlay=True) + + PDF only: Put an image inside the given rectangle. The image can be taken from a pixmap, a file or a memory area - of these parameters **exactly one** must be specified. + + Changed in version 1.14.11 By default, the image keeps its aspect ratio. + + :arg rect_like rect: where to put the image on the page. Only the rectangle part which is inside the page is used. This intersection must be finite and not empty. + + Changed in version 1.14.13 The image is now always placed **centered** in the rectangle, i.e. the center of the image and the rectangle coincide. + + :arg str filename: name of an image file (all formats supported by MuPDF -- see :ref:`ImageFiles`). If the same image is to be inserted multiple times, choose one of the other two options to avoid some overhead. + + :arg bytes,bytearray,io.BytesIO stream: image in memory (all formats supported by MuPDF -- see :ref:`ImageFiles`). This is the most efficient option. + + Changed in version 1.14.13 *io.BytesIO* is now also supported. + + :arg pixmap: a pixmap containing the image. + :type pixmap: :ref:`Pixmap` + + :arg int rotate: *(new in version v1.14.11)* rotate the image. Must be an integer multiple of 90 degrees. If you need a rotation by an arbitrary angle, consider converting the image to a PDF (:meth:`Document.convertToPDF`) first and then use :meth:`Page.showPDFpage` instead. + + :arg bool keep_proportion: *(new in version v1.14.11)* maintain the aspect ratio of the image. + + For a description of *overlay* see :ref:`CommonParms`. + + This example puts the same image on every page of a document:: + + >>> doc = fitz.open(...) + >>> rect = fitz.Rect(0, 0, 50, 50) # put thumbnail in upper left corner + >>> img = open("some.jpg", "rb").read() # an image file + >>> for page in doc: + page.insertImage(rect, stream = img) + >>> doc.save(...) + + .. note:: + + 1. If that same image had already been present in the PDF, then only a reference to it will be inserted. This of course considerably saves disk space and processing time. But to detect this fact, existing PDF images need to be compared with the new one. This is achieved by storing an MD5 code for each image in a table and only compare the new image's MD5 code against the table entries. Generating this MD5 table, however, is done when the first image is inserted - which therefore may have an extended response time. + + 2. You can use this method to provide a background or foreground image for the page, like a copyright, a watermark. Please remember, that watermarks require a transparent image ... + + 3. The image may be inserted uncompressed, e.g. if a *Pixmap* is used or if the image has an alpha channel. Therefore, consider using *deflate=True* when saving the file. + + 4. The image is stored in the PDF in its original quality. This may be much better than you ever need for your display. In this case consider decreasing the image size before inserting it -- e.g. by using the pixmap option and then shrinking it or scaling it down (see :ref:`Pixmap` chapter). The PIL method *Image.thumbnail()* can also be used for that purpose. The file size savings can be very significant. + + 5. The most efficient way to display the same image on multiple pages is another method: :meth:`showPDFpage`. Consult :meth:`Document.convertToPDF` for how to obtain intermediary PDFs usable for that method. Demo script `fitz-logo.py `_ implements a fairly complete approach. + + .. index:: + pair: blocks; getText + pair: dict; getText + pair: flags; getText + pair: html; getText + pair: json; getText + pair: rawdict; getText + pair: text; getText + pair: words; getText + pair: xhtml; getText + pair: xml; getText + + .. method:: getText(opt="text", flags=None) + + Retrieves the content of a page in a variety of formats. This is a wrapper for :ref:`TextPage` methods by choosing the output option as follows: + + * "text" -- :meth:`TextPage.extractTEXT`, default + * "blocks" -- :meth:`TextPage.extractBLOCKS` + * "words" -- :meth:`TextPage.extractWORDS` + * "html" -- :meth:`TextPage.extractHTML` + * "xhtml" -- :meth:`TextPage.extractXHTML` + * "xml" -- :meth:`TextPage.extractXML` + * "dict" -- :meth:`TextPage.extractDICT` + * "json" -- :meth:`TextPage.extractJSON` + * "rawdict" -- :meth:`TextPage.extractRAWDICT` + + :arg str opt: A string indicating the requested format, one of the above. A mixture of upper and lower case is supported. + + Changed in version 1.16.3 Values "words" and "blocks" are now also accepted. + + :arg int flags: *(new in version 1.16.2)* indicator bits to control whether to include images or how text should be handled with respect to white spaces and ligatures. See :ref:`TextPreserve` for available indicators and :ref:`text_extraction_flags` for default settings. + + :rtype: *str, list, dict* + :returns: The page's content as a string, list or as a dictionary. Refer to the corresponding :ref:`TextPage` method for details. + + .. note:: You can use this method as a **document conversion tool** from any supported document type (not only PDF!) to one of TEXT, HTML, XHTML or XML documents. + + .. index:: + pair: flags; getTextPage + + .. method:: getTextPage(flags=3) + + *(New in version 1.16.5)* + + Create a :ref:`TextPage` for the page. This method avoids using an intermediate :ref:`DisplayList`. + + :arg in flags: indicator bits controlling the content available for subsequent extraction -- see the parameter of :meth:`Page.getText`. + + :returns: :ref:`TextPage` + + .. method:: getFontList(full=False) + + PDF only: Return a list of fonts referenced by the page. Wrapper for :meth:`Document.getPageFontList`. + + .. method:: getImageList(full=False) + + PDF only: Return a list of images referenced by the page. Wrapper for :meth:`Document.getPageImageList`. + + .. method:: getImageBbox(item) + + PDF only: Return the boundary box of an image. + + *Changed in version 1.17.0:* + + * The method should deliver correct results now. + * The page's ``/Contents`` are no longer modified by this method. + + :arg list,str item: an item of the list :meth:`Page.getImageList` with *full=True* specified, or the **name** entry of such an item, which is item[-3] (or item[7] respectively). + + :rtype: :ref:`Rect` + :returns: the boundary box of the image. + *(Changed in version 1.16.7)* If the page in fact does not display this image, an infinite rectangle is returned now. In previous versions, an exception was raised. + *(Changed in version 1.17.0)* Only images referenced directly by the page are considered. This means that images occurring in embedded PDF pages are ignored and an exception is raised. + + .. note:: + + * Be aware that :meth:`Page.getImageList` may contain "dead" entries, i.e. there may be image references which are **not displayed** by this page. In this case an infinite rectangle is returned. + * As mentioned above, images inside embedded PDF pages are ignored by this method. + + .. index:: + pair: matrix; getSVGimage + + .. method:: getSVGimage(matrix=fitz.Identity) + + Create an SVG image from the page. Only full page images are currently supported. + + :arg matrix_like matrix: a matrix, default is :ref:`Identity`. + + :returns: a UTF-8 encoded string that contains the image. Because SVG has XML syntax it can be saved in a text file with extension *.svg*. + + .. index:: + pair: alpha; getPixmap + pair: annots; getPixmap + pair: clip; getPixmap + pair: colorspace; getPixmap + pair: matrix; getPixmap + + .. method:: getPixmap(matrix=fitz.Identity, colorspace=fitz.csRGB, clip=None, alpha=False, annots=True) + + Create a pixmap from the page. This is probably the most often used method to create a :ref:`Pixmap`. + + :arg matrix_like matrix: default is :ref:`Identity`. + :arg colorspace: Defines the required colorspace, one of "GRAY", "RGB" or "CMYK" (case insensitive). Or specify a :ref:`Colorspace`, ie. one of the predefined ones: :data:`csGRAY`, :data:`csRGB` or :data:`csCMYK`. + :type colorspace: str or :ref:`Colorspace` + :arg irect_like clip: restrict rendering to this area. + :arg bool alpha: whether to add an alpha channel. Always accept the default *False* if you do not really need transparency. This will save a lot of memory (25% in case of RGB ... and pixmaps are typically **large**!), and also processing time. Also note an **important difference** in how the image will be rendered: with *True* the pixmap's samples area will be pre-cleared with *0x00*. This results in **transparent** areas where the page is empty. With *False* the pixmap's samples will be pre-cleared with *0xff*. This results in **white** where the page has nothing to show. + + Changed in version 1.14.17 + The default alpha value is now *False*. + + * Generated with *alpha=True* + + .. image:: images/img-alpha-1.png + + + * Generated with *alpha=False* + + .. image:: images/img-alpha-0.png + + :arg bool annots: *(new in vrsion 1.16.0)* whether to also render annotations or to suppress them. You can create pixmaps for annotations separately. + + :rtype: :ref:`Pixmap` + :returns: Pixmap of the page. For fine-controlling the generated image, the by far most important parameter is **matrix**. E.g. you can increase or decrease the image resolution by using **Matrix(xzoom, yzoom)**. If zoom > 1, you will get a higher resolution: zoom=2 will double the number of pixels in that direction and thus generate a 2 times larger image. Non-positive values will flip horizontally, resp. vertically. Similarly, matrices also let you rotate or shear, and you can combine effects via e.g. matrix multiplication. See the :ref:`Matrix` section to learn more. + + .. method:: annot_names() + + *(New in version 1.16.10)* + + PDF only: return a list of the names of annotations, widgets and links. Technically, these are the */NM* values of every PDF object found in the page's */Annots* array. + + :rtype: list + + + .. method:: annot_xrefs() + + *(New in version 1.17.1)* + + PDF only: return a list of the :data`xref` numbers of annotations, widgets and links -- technically of all entries found in the page's */Annots* array. + + :rtype: list + :returns: a list of items *(xref, type)* where type is the annotation type. Use the type to tell apart links, fields and annotations, see :ref:`AnnotationTypes`. + + + .. method:: load_annot(ident) + + *(Deprecated since v1.17.1)*. + + .. method:: loadAnnot(ident) + + *(New in version 1.17.1)* + + PDF only: return the annotation identified by *ident*. This may be its unique name (PDF */NM* key), or its :data:`xref`. + + :arg str,int ident: the annotation name or xref. + + :rtype: :ref:`Annot` + :returns: the annotation or *None*. + + .. note:: Methods :meth:`Page.annot_names`, :meth:`Page.annots_xrefs` provide lists of names or xrefs, respectively, from where an item may be picked and loaded via this method. + + .. method:: loadLinks() + + Return the first link on a page. Synonym of property :attr:`firstLink`. + + :rtype: :ref:`Link` + :returns: first link on the page (or *None*). + + .. index:: + pair: rotate; setRotation + + .. method:: setRotation(rotate) + + PDF only: Sets the rotation of the page. + + :arg int rotate: An integer specifying the required rotation in degrees. Must be an integer multiple of 90. Values will be converted to one of 0, 90, 180, 270. + + .. index:: + pair: clip; showPDFpage + pair: keep_proportion; showPDFpage + pair: overlay; showPDFpage + pair: rotate; showPDFpage + + .. method:: showPDFpage(rect, docsrc, pno=0, keep_proportion=True, overlay=True, rotate=0, clip=None) + + PDF only: Display a page of another PDF as a **vector image** (otherwise similar to :meth:`Page.insertImage`). This is a multi-purpose method. For example, you can use it to + + * create "n-up" versions of existing PDF files, combining several input pages into **one output page** (see example `4-up.py `_), + * create "posterized" PDF files, i.e. every input page is split up in parts which each create a separate output page (see `posterize.py `_), + * include PDF-based vector images like company logos, watermarks, etc., see `svg-logo.py `_, which puts an SVG-based logo on each page (requires additional packages to deal with SVG-to-PDF conversions). + + Changed in version 1.14.11 + Parameter *reuse_xref* has been deprecated. + + :arg rect_like rect: where to place the image on current page. Must be finite and its intersection with the page must not be empty. + + Changed in version 1.14.11 + Position the source rectangle centered in this rectangle. + + :arg docsrc: source PDF document containing the page. Must be a different document object, but may be the same file. + :type docsrc: :ref:`Document` + + :arg int pno: page number (0-based, in *-inf < pno < docsrc.pageCount*) to be shown. + + :arg bool keep_proportion: whether to maintain the width-height-ratio (default). If false, all 4 corners are always positioned on the border of the target rectangle -- whatever the rotation value. In general, this will deliver distorted and /or non-rectangular images. + + :arg bool overlay: put image in foreground (default) or background. + + :arg float rotate: *(new in version 1.14.10)* show the source rectangle rotated by some angle. *Changed in version 1.14.11:* Any angle is now supported. + + :arg rect_like clip: choose which part of the source page to show. Default is the full page, else must be finite and its intersection with the source page must not be empty. + + .. note:: In contrast to method :meth:`Document.insertPDF`, this method does not copy annotations or links, so they are not shown. But all its **other resources (text, images, fonts, etc.)** will be imported into the current PDF. They will therefore appear in text extractions and in :meth:`getFontList` and :meth:`getImageList` lists -- even if they are not contained in the visible area given by *clip*. + + Example: Show the same source page, rotated by 90 and by -90 degrees: + + >>> doc = fitz.open() # new empty PDF + >>> page=doc.newPage() # new page in A4 format + >>> + >>> # upper half page + >>> r1 = fitz.Rect(0, 0, page.rect.width, page.rect.height/2) + >>> + >>> # lower half page + >>> r2 = r1 + (0, page.rect.height/2, 0, page.rect.height/2) + >>> + >>> src = fitz.open("PyMuPDF.pdf") # show page 0 of this + >>> + >>> page.showPDFpage(r1, src, 0, rotate=90) + >>> page.showPDFpage(r2, src, 0, rotate=-90) + >>> doc.save("show.pdf") + + .. image:: images/img-showpdfpage.jpg + :scale: 70 + + .. method:: newShape() + + PDF only: Create a new :ref:`Shape` object for the page. + + :rtype: :ref:`Shape` + :returns: a new :ref:`Shape` to use for compound drawings. See description there. + + + .. index:: + pair: flags; searchFor + pair: hit_max; searchFor + pair: quads; searchFor + + .. method:: searchFor(text, hit_max=16, quads=False, flags=None) + + Searches for *text* on a page. Wrapper for :meth:`TextPage.search`. + + :arg str text: Text to search for. Upper / lower case is ignored. The string may contain spaces. + + :arg int hit_max: Maximum number of occurrences accepted. + :arg bool quads: Return :ref:`Quad` instead of :ref:`Rect` objects. + :arg int flags: Control the data extracted by the underlying :ref:`TextPage`. Default is 0 (ligatures are dissolved, white space is replaced with space and excessive spaces are not suppressed). + + :rtype: list + + :returns: A list of :ref:`Rect` \s (resp. :ref:`Quad` \s) each of which -- **normally!** -- surrounds one occurrence of *text*. **However:** if the search string spreads across more than one line, then a separate item is recorded in the list for each part of the string per line. So, if you are looking for "search string" and the two words happen to be located on separate lines, two entries will be recorded in the list: one for "search" and one for "string". + + .. note:: In this way, the effect supports multi-line text marker annotations. + + + .. method:: setMediaBox(r) + + PDF only: *(New in v1.16.13)* Change the physical page dimension by setting :data:`MediaBox` in the page's object definition. + + :arg rect-like r: the new :data:`MediaBox` value. + + .. note:: This method also sets the page's :data:`CropBox` to the same value -- to prevent mismatches caused by values further up in the parent hierarchy. + + .. caution:: For existing pages this may have unexpected effects, if painting commands depend on a certain setting, and may lead to an empty or distorted appearance. + + + .. method:: setCropBox(r) + + PDF only: change the visible part of the page. + + :arg rect_like r: the new visible area of the page. Note that this **must** be specified in **unrotated coordinates**. + + After execution if the page is not rotated, :attr:`Page.rect` will equal this rectangle, shifted to the top-left position (0, 0). Example session: + + >>> page = doc.newPage() + >>> page.rect + fitz.Rect(0.0, 0.0, 595.0, 842.0) + >>> + >>> page.CropBox # CropBox and MediaBox still equal + fitz.Rect(0.0, 0.0, 595.0, 842.0) + >>> + >>> # now set CropBox to a part of the page + >>> page.setCropBox(fitz.Rect(100, 100, 400, 400)) + >>> # this will also change the "rect" property: + >>> page.rect + fitz.Rect(0.0, 0.0, 300.0, 300.0) + >>> + >>> # but MediaBox remains unaffected + >>> page.MediaBox + fitz.Rect(0.0, 0.0, 595.0, 842.0) + >>> + >>> # revert everything we did + >>> page.setCropBox(page.MediaBox) + >>> page.rect + fitz.Rect(0.0, 0.0, 595.0, 842.0) + + .. attribute:: rotation + + Contains the rotation of the page in degrees (always 0 for non-PDF types). + + :type: int + + .. attribute:: CropBoxPosition + + Contains the top-left point of the page's */CropBox* for a PDF, otherwise *Point(0, 0)*. + + :type: :ref:`Point` + + .. attribute:: CropBox + + The page's */CropBox* for a PDF. Always the **unrotated** page rectangle is returned. For a non-PDF this will always equal the page rectangle. + + :type: :ref:`Rect` + + .. attribute:: MediaBoxSize + + Contains the width and height of the page's :attr:`Page.MediaBox` for a PDF, otherwise the bottom-right coordinates of :attr:`Page.rect`. + + :type: :ref:`Point` + + .. attribute:: MediaBox + + The page's :data:`MediaBox` for a PDF, otherwise :attr:`Page.rect`. + + :type: :ref:`Rect` + + .. note:: For most PDF documents and for **all other document types**, *page.rect == page.CropBox == page.MediaBox* is true. However, for some PDFs the visible page is a true subset of :data:`MediaBox`. Also, if the page is rotated, its ``Page.rect`` may not equal ``Page.CropBox``. In these cases the above attributes help to correctly locate page elements. + + .. attribute:: transformationMatrix + + This matrix translates coordinates from the PDF space to the MuPDF space. For example, in PDF ``/Rect [x0 y0 x1 y1]`` the pair (x0, y0) specifies the **bottom-left** point of the rectangle -- in contrast to MuPDF's system, where (x0, y0) specify top-left. Multiplying the PDF coordinates with this matrix will deliver the (Py-) MuPDF rectangle version. Obviously, the inverse matrix will again yield the PDF rectangle. + + :type: :ref:`Matrix` + + .. attribute:: rotationMatrix + + .. attribute:: derotationMatrix + + These matrices may be used for dealing with rotated PDF pages. When adding / inserting anything to a PDF page with PyMuPDF, the coordinates of the **unrotated** page are always used. These matrices help translating between the two states. Example: if a page is rotated by 90 degrees -- what would then be the coordinates of the top-left Point(0, 0) of an A4 page? + + >>> page.setRotation(90) # rotate an ISO A4 page + >>> page.rect + Rect(0.0, 0.0, 842.0, 595.0) + >>> p = fitz.Point(0, 0) # where did top-left point land? + >>> p * page.rotationMatrix + Point(842.0, 0.0) + >>> + + :type: :ref:`Matrix` + + .. attribute:: firstLink + + Contains the first :ref:`Link` of a page (or *None*). + + :type: :ref:`Link` + + .. attribute:: firstAnnot + + Contains the first :ref:`Annot` of a page (or *None*). + + :type: :ref:`Annot` + + .. attribute:: firstWidget + + Contains the first :ref:`Widget` of a page (or *None*). + + :type: :ref:`Widget` + + .. attribute:: number + + The page number. + + :type: int + + .. attribute:: parent + + The owning document object. + + :type: :ref:`Document` + + + .. attribute:: rect + + Contains the rectangle of the page. Same as result of :meth:`Page.bound()`. + + :type: :ref:`Rect` + + .. attribute:: xref + + The page's PDF :data:`xref`. Zero if not a PDF. + + :type: :ref:`Rect` + +----- + +Description of *getLinks()* Entries +---------------------------------------- +Each entry of the *getLinks()* list is a dictionay with the following keys: + +* *kind*: (required) an integer indicating the kind of link. This is one of *LINK_NONE*, *LINK_GOTO*, *LINK_GOTOR*, *LINK_LAUNCH*, or *LINK_URI*. For values and meaning of these names refer to :ref:`linkDest Kinds`. + +* *from*: (required) a :ref:`Rect` describing the "hot spot" location on the page's visible representation (where the cursor changes to a hand image, usually). + +* *page*: a 0-based integer indicating the destination page. Required for *LINK_GOTO* and *LINK_GOTOR*, else ignored. + +* *to*: either a *fitz.Point*, specifying the destination location on the provided page, default is *fitz.Point(0, 0)*, or a symbolic (indirect) name. If an indirect name is specified, *page = -1* is required and the name must be defined in the PDF in order for this to work. Required for *LINK_GOTO* and *LINK_GOTOR*, else ignored. + +* *file*: a string specifying the destination file. Required for *LINK_GOTOR* and *LINK_LAUNCH*, else ignored. + +* *uri*: a string specifying the destination internet resource. Required for *LINK_URI*, else ignored. + +* *xref*: an integer specifying the PDF :data:`xref` of the link object. Do not change this entry in any way. Required for link deletion and update, otherwise ignored. For non-PDF documents, this entry contains *-1*. It is also *-1* for **all** entries in the *getLinks()* list, if **any** of the links is not supported by MuPDF - see the note below. + +Notes on Supporting Links +--------------------------- +MuPDF's support for links has changed in **v1.10a**. These changes affect link types :data:`LINK_GOTO` and :data:`LINK_GOTOR`. + +Reading (pertains to method *getLinks()* and the *firstLink* property chain) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If MuPDF detects a link to another file, it will supply either a *LINK_GOTOR* or a *LINK_LAUNCH* link kind. In case of *LINK_GOTOR* destination details may either be given as page number (eventually including position information), or as an indirect destination. + +If an indirect destination is given, then this is indicated by *page = -1*, and *link.dest.dest* will contain this name. The dictionaries in the *getLinks()* list will contain this information as the *to* value. + +**Internal links are always** of kind *LINK_GOTO*. If an internal link specifies an indirect destination, it **will always be resolved** and the resulting direct destination will be returned. Names are **never returned for internal links**, and undefined destinations will cause the link to be ignored. + +Writing +~~~~~~~~~ + +PyMuPDF writes (updates, inserts) links by constructing and writing the appropriate PDF object **source**. This makes it possible to specify indirect destinations for *LINK_GOTOR* **and** *LINK_GOTO* link kinds (pre *PDF 1.2* file formats are **not supported**). + +.. warning:: If a *LINK_GOTO* indirect destination specifies an undefined name, this link can later on not be found / read again with MuPDF / PyMuPDF. Other readers however **will** detect it, but flag it as erroneous. + +Indirect *LINK_GOTOR* destinations can in general of course not be checked for validity and are therefore **always accepted**. + +Homologous Methods of :ref:`Document` and :ref:`Page` +-------------------------------------------------------- +This is an overview of homologous methods on the :ref:`Document` and on the :ref:`Page` level. + +====================================== ===================================== +**Document Level** **Page Level** +====================================== ===================================== +*Document.getPageFontlist(pno)* :meth:`Page.getFontList` +*Document.getPageImageList(pno)* :meth:`Page.getImageList` +*Document.getPagePixmap(pno, ...)* :meth:`Page.getPixmap` +*Document.getPageText(pno, ...)* :meth:`Page.getText` +*Document.searchPageFor(pno, ...)* :meth:`Page.searchFor` +====================================== ===================================== + +The page number "pno"` is a 0-based integer *-inf < pno < pageCount*. + +.. note:: + + Most document methods (left column) exist for convenience reasons, and are just wrappers for: *Document[pno].*. So they **load and discard the page** on each execution. + + However, the first two methods work differently. They only need a page's object definition statement - the page itself will **not** be loaded. So e.g. :meth:`Page.getFontList` is a wrapper the other way round and defined as follows: *page.getFontList == page.parent.getPageFontList(page.number)*. + +.. rubric:: Footnotes + +.. [#f1] If your existing code already uses the installed base name as a font reference (as it was supported by PyMuPDF versions earlier than 1.14), this will continue to work. + +.. [#f2] Not all PDF reader software (including internet browsers and office software) display all of these fonts. And if they do, the difference between the **serifed** and the **non-serifed** version may hardly be noticable. But serifed and non-serifed versions lead to different installed base fonts, thus providing an option to be displayable with your specific PDF viewer. + +.. [#f3] Not all PDF readers display these fonts at all. Some others do, but use a wrong character spacing, etc. + +.. [#f4] You are generally free to choose any of the :ref:`mupdficons` you consider adequate. diff --git a/docs/pixmap.rst b/docs/pixmap.rst new file mode 100644 index 0000000..244a33e --- /dev/null +++ b/docs/pixmap.rst @@ -0,0 +1,453 @@ +.. _Pixmap: + +================ +Pixmap +================ + +Pixmaps ("pixel maps") are objects at the heart of MuPDF's rendering capabilities. They represent plane rectangular sets of pixels. Each pixel is described by a number of bytes ("components") defining its color, plus an optional alpha byte defining its transparency. + +In PyMuPDF, there exist several ways to create a pixmap. Except the first one, all of them are available as overloaded constructors. A pixmap can be created ... + +1. from a document page (method :meth:`Page.getPixmap`) +2. empty, based on :ref:`Colorspace` and :ref:`IRect` information +3. from a file +4. from an in-memory image +5. from a memory area of plain pixels +6. from an image inside a PDF document +7. as a copy of another pixmap + +.. note:: A number of image formats is supported as input for points 3. and 4. above. See section :ref:`ImageFiles`. + +Have a look at the :ref:`FAQ` section to see some pixmap usage "at work". + +============================= =================================================== +**Method / Attribute** **Short Description** +============================= =================================================== +:meth:`Pixmap.clearWith` clear parts of a pixmap +:meth:`Pixmap.copyPixmap` copy parts of another pixmap +:meth:`Pixmap.gammaWith` apply a gamma factor to the pixmap +:meth:`Pixmap.getImageData` return a memory area in a variety of formats +:meth:`Pixmap.getPNGData` return a PNG as a memory area +:meth:`Pixmap.invertIRect` invert the pixels of a given area +:meth:`Pixmap.pillowWrite` save as image using pillow (experimental) +:meth:`Pixmap.pillowData` write image stream using pillow (experimental) +:meth:`Pixmap.pixel` return the value of a pixel +:meth:`Pixmap.setAlpha` set alpha values +:meth:`Pixmap.setPixel` set the color of a pixel +:meth:`Pixmap.setRect` set the color of a rectangle +:meth:`Pixmap.setResolution` set the image resolution +:meth:`Pixmap.shrink` reduce size keeping proportions +:meth:`Pixmap.tintWith` tint a pixmap with a color +:meth:`Pixmap.writeImage` save a pixmap in a variety of formats +:meth:`Pixmap.writePNG` save a pixmap as a PNG file +:attr:`Pixmap.alpha` transparency indicator +:attr:`Pixmap.colorspace` pixmap's :ref:`Colorspace` +:attr:`Pixmap.height` pixmap height +:attr:`Pixmap.interpolate` interpolation method indicator +:attr:`Pixmap.irect` :ref:`IRect` of the pixmap +:attr:`Pixmap.n` bytes per pixel +:attr:`Pixmap.samples` pixel area +:attr:`Pixmap.size` pixmap's total length +:attr:`Pixmap.stride` size of one image row +:attr:`Pixmap.width` pixmap width +:attr:`Pixmap.x` X-coordinate of top-left corner +:attr:`Pixmap.xres` resolution in X-direction +:attr:`Pixmap.y` Y-coordinate of top-left corner +:attr:`Pixmap.yres` resolution in Y-direction +============================= =================================================== + +**Class API** + +.. class:: Pixmap + + .. method:: __init__(self, colorspace, irect, alpha) + + **New empty pixmap:** Create an empty pixmap of size and origin given by the rectangle. So, *irect.top_left* designates the top left corner of the pixmap, and its width and height are *irect.width* resp. *irect.height*. Note that the image area is **not initialized** and will contain crap data -- use eg. :meth:`clearWith` or :meth:`setRect` to be sure. + + :arg colorspace: colorspace. + :type colorspace: :ref:`Colorspace` + + :arg irect_like irect: Tte pixmap's position and dimension. + + :arg bool alpha: Specifies whether transparency bytes should be included. Default is *False*. + + .. method:: __init__(self, colorspace, source) + + **Copy and set colorspace:** Copy *source* pixmap converting colorspace. Any colorspace combination is possible, but source colorspace must not be *None*. + + :arg colorspace: desired **target** colorspace. This **may also be** *None*. In this case, a "masking" pixmap is created: its :attr:`Pixmap.samples` will consist of the source's alpha bytes only. + :type colorspace: :ref:`Colorspace` + + :arg source: the source pixmap. + :type source: *Pixmap* + + .. method:: __init__(self, source, width, height, [clip]) + + **Copy and scale:** Copy *source* pixmap choosing new width and height values. Supports partial copying and the source colorspace may be also *None*. + + :arg source: the source pixmap. + :type source: *Pixmap* + + :arg float width: desired target width. + + :arg float height: desired target height. + + :arg irect_like clip: a region of the source pixmap to take the copy from. + + .. note:: If width or height are not *de facto* integers (meaning e.g. *float(int(width) != width*), then pixmap will be created with *alpha = 1*. + + .. method:: __init__(self, source, alpha=1) + + **Copy and add or drop alpha:** Copy *source* and add or drop its alpha channel. Identical copy if *alpha* equals *source.alpha*. If an alpha channel is added, its values will be set to 255. + + :arg source: source pixmap. + :type source: *Pixmap* + + :arg bool alpha: whether the target will have an alpha channel, default and mandatory if source colorspace is *None*. + + .. note:: A typical use includes separation of color and transparency bytes in separate pixmaps. Some applications require this like e.g. *wx.Bitmap.FromBufferAndAlpha()* of *wxPython*: + + >>> # 'pix' is an RGBA pixmap + >>> pixcolors = fitz.Pixmap(pix, 0) # extract the RGB part (drop alpha) + >>> pixalpha = fitz.Pixmap(None, pix) # extract the alpha part + >>> bm = wx.Bitmap.FromBufferAndAlpha(pix.widht, pix.height, pixcolors.samples, pixalpha.samples) + + + .. method:: __init__(self, filename) + + **From a file:** Create a pixmap from *filename*. All properties are inferred from the input. The origin of the resulting pixmap is *(0, 0)*. + + :arg str filename: Path of the image file. + + .. method:: __init__(self, stream) + + **From memory:** Create a pixmap from a memory area. All properties are inferred from the input. The origin of the resulting pixmap is *(0, 0)*. + + :arg bytes,bytearray,BytesIO stream: Data containing a complete, valid image. Could have been created by e.g. *stream = bytearray(open('image.file', 'rb').read())*. Type *bytes* is supported in **Python 3 only**, because *bytes == str* in Python 2 and the method will interpret the stream as a filename. + + *Changed in version 1.14.13:* *io.BytesIO* is now also supported. + + + .. method:: __init__(self, colorspace, width, height, samples, alpha) + + **From plain pixels:** Create a pixmap from *samples*. Each pixel must be represented by a number of bytes as controlled by the *colorspace* and *alpha* parameters. The origin of the resulting pixmap is *(0, 0)*. This method is useful when raw image data are provided by some other program -- see :ref:`FAQ`. + + :arg colorspace: Colorspace of image. + :type colorspace: :ref:`Colorspace` + + :arg int width: image width + + :arg int height: image height + + :arg bytes,bytearray,BytesIO samples: an area containing all pixels of the image. Must include alpha values if specified. + + *Changed in version 1.14.13:* (1) *io.BytesIO* can now also be used. (2) Data are now **copied** to the pixmap, so may safely be deleted or become unavailable. + + :arg bool alpha: whether a transparency channel is included. + + .. note:: + + 1. The following equation **must be true**: *(colorspace.n + alpha) * width * height == len(samples)*. + 2. Starting with version 1.14.13, the samples data are **copied** to the pixmap. + + + .. method:: __init__(self, doc, xref) + + **From a PDF image:** Create a pixmap from an image **contained in PDF** *doc* identified by its :data:`xref`. All pimap properties are set by the image. Have a look at `extract-img1.py `_ and `extract-img2.py `_ to see how this can be used to recover all of a PDF's images. + + :arg doc: an opened **PDF** document. + :type doc: :ref:`Document` + + :arg int xref: the :data:`xref` of an image object. For example, you can make a list of images used on a particular page with :meth:`Document.getPageImageList`, which also shows the :data:`xref` numbers of each image. + + .. method:: clearWith([value [, irect]]) + + Initialize the samples area. + + :arg int value: if specified, values from 0 to 255 are valid. Each color byte of each pixel will be set to this value, while alpha will be set to 255 (non-transparent) if present. If omitted, then all bytes (including any alpha) are cleared to *0x00*. + + :arg irect_like irect: the area to be cleared. Omit to clear the whole pixmap. Can only be specified, if *value* is also specified. + + .. method:: tintWith(red, green, blue) + + Colorize (tint) a pixmap with a color provided as an integer triple (red, green, blue). Only colorspaces :data:`CS_GRAY` and :data:`CS_RGB` are supported, others are ignored with a warning. + + If the colorspace is :data:`CS_GRAY`, *(red + green + blue)/3* will be taken as the tint value. + + :arg int red: *red* component. + + :arg int green: *green* component. + + :arg int blue: *blue* component. + + .. method:: gammaWith(gamma) + + Apply a gamma factor to a pixmap, i.e. lighten or darken it. Pixmaps with colorspace *None* are ignored with a warning. + + :arg float gamma: *gamma = 1.0* does nothing, *gamma < 1.0* lightens, *gamma > 1.0* darkens the image. + + .. method:: shrink(n) + + Shrink the pixmap by dividing both, its width and height by 2\ :sup:`n`. + + :arg int n: determines the new pixmap (samples) size. For example, a value of 2 divides width and height by 4 and thus results in a size of one 16\ :sup:`th` of the original. Values less than 1 are ignored with a warning. + + .. note:: Use this methods to reduce a pixmap's size retaining its proportion. The pixmap is changed "in place". If you want to keep original and also have more granular choices, use the resp. copy constructor above. + + .. method:: pixel(x, y) + + *New in version:: 1.14.5:* Return the value of the pixel at location (x, y) (column, line). + + :arg int x: the column number of the pixel. Must be in *range(pix.width)*. + :arg int y: the line number of the pixel, Must be in *range(pix.height)*. + + :rtype: list + :returns: a list of color values and, potentially the alpha value. Its length and content depend on the pixmap's colorspace and the presence of an alpha. For RGBA pixmaps the result would e.g. be *[r, g, b, a]*. All items are integers in *range(256)*. + + .. method:: setPixel(x, y, color) + + *New in version 1.14.7:* Set the color of the pixel at location (x, y) (column, line). + + :arg int x: the column number of the pixel. Must be in *range(pix.width)*. + :arg int y: the line number of the pixel. Must be in *range(pix.height)*. + :arg sequence color: the desired color given as a sequence of integers in *range(256)*. The length of the sequence must equal :attr:`Pixmap.n`, which includes any alpha byte. + + .. method:: setRect(irect, color) + + *New in version 1.14.8:* Set the pixels of a rectangle to a color. + + :arg irect_like irect: the rectangle to be filled with the color. The actual area is the intersection of this parameter and :attr:`Pixmap.irect`. For an empty intersection (or an invalid parameter), no change will happen. + :arg sequence color: the desired color given as a sequence of integers in *range(256)*. The length of the sequence must equal :attr:`Pixmap.n`, which includes any alpha byte. + + :rtype: bool + :returns: *False* if the rectangle was invalid or had an empty intersection with :attr:`Pixmap.irect`, else *True*. + + .. note:: + + 1. This method is equivalent to :meth:`Pixmap.setPixel` executed for each pixel in the rectangle, but is obviously **very much faster** if many pixels are involved. + 2. This method can be used similar to :meth:`Pixmap.clearWith` to initialize a pixmap with a certain color like this: *pix.setRect(pix.irect, (255, 255, 0))* (RGB example, colors the complete pixmap with yellow). + + .. method:: setResolution(xres, yres) + + *(New in v1.16.17)* Set the resolution (dpi) in x and y direction. + + :arg int xres: resolution in x direction. + :arg int yres: resolution in y direction. + + .. note:: This is just documentary information. In MuPDF, this will not have other implications and will not be written to images created from the pixmap. + + + .. method:: setAlpha([alphavalues]) + + Change the alpha values. The pixmap must have an alpha channel. + + :arg bytes,bytearray,BytesIO alphavalues: the new alpha values. If provided, its length must be at least *width * height*. If omitted, all alpha values are set to 255 (no transparency). + + *Changed in version 1.14.13:* *io.BytesIO* is now also supported. + + + .. method:: invertIRect([irect]) + + Invert the color of all pixels in :ref:`IRect` *irect*. Will have no effect if colorspace is *None*. + + :arg irect_like irect: The area to be inverted. Omit to invert everything. + + .. method:: copyPixmap(source, irect) + + Copy the *irect* part of the *source* pixmap into the corresponding area of this one. The two pixmaps may have different dimensions and can each have :data:`CS_GRAY` or :data:`CS_RGB` colorspaces, but they currently **must** have the same alpha property [#f2]_. The copy mechanism automatically adjusts discrepancies between source and target like so: + + If copying from :data:`CS_GRAY` to :data:`CS_RGB`, the source gray-shade value will be put into each of the three rgb component bytes. If the other way round, *(r + g + b) / 3* will be taken as the gray-shade value of the target. + + Between *irect* and the target pixmap's rectangle, an "intersection" is calculated at first. This takes into account the rectangle coordinates and the current attribute values *source.x* and *source.y* (which you are free to modify for this purpose). Then the corresponding data of this intersection are copied. If the intersection is empty, nothing will happen. + + :arg source: source pixmap. + :type source: :ref:`Pixmap` + + :arg irect_like irect: The area to be copied. + + .. method:: writeImage(filename, output=None) + + Save pixmap as an image file. Depending on the output chosen, only some or all colorspaces are supported and different file extensions can be chosen. Please see the table below. Since MuPDF v1.10a the *savealpha* option is no longer supported and will be silently ignored. + + :arg str filename: The filename to save to. The filename's extension determines the image format, if not overriden by the output parameter. + + :arg str output: The requested image format. The default is the filename's extension. If not recognized, *png* is assumed. For other possible values see :ref:`PixmapOutput`. + + .. method:: writePNG(filename) + + Equal to *pix.writeImage(filename, "png")*. + + .. method:: getImageData(output="png") + + *New in version 1.14.5:* Return the pixmap as a *bytes* memory object of the specified format -- similar to :meth:`writeImage`. + + :arg str output: The requested image format. The default is "png" for which this function equals :meth:`getPNGData`. For other possible values see :ref:`PixmapOutput`. + + :rtype: bytes + + .. method:: getPNGdata() + + .. method:: getPNGData() + + Equal to *pix.getImageData("png")*. + + :rtype: bytes + + .. method:: pillowWrite(*args, **kwargs) + + *(New in v1.17.3)* + + Write the pixmap as an image file using Pillow. Use this method for image formats or extended image features not supported by MuPDF. Examples are + + * Formats JPEG, JPX, J2K, WebP, etc. + * Storing EXIF or dpi information. + * If you do not provide dpi information, the values stored with the pixmap are automatically used. + + A simple example: ``pix.pillowWrite("some.jpg", optimize=True, dpi=(150,150))``. For details on possible parameters see the Pillow documentation. + + .. method:: pillowData(*args, **kwargs) + + Return the pixmap as a bytes object in the specified format using Pillow. For example ``stream = pix.pillowData(format="JPEG", optimize=True)``. For details on possible parameters see the Pillow documentation. + + + .. attribute:: alpha + + Indicates whether the pixmap contains transparency information. + + :type: bool + + .. attribute:: colorspace + + The colorspace of the pixmap. This value may be *None* if the image is to be treated as a so-called *image mask* or *stencil mask* (currently happens for extracted PDF document images only). + + :type: :ref:`Colorspace` + + .. attribute:: stride + + Contains the length of one row of image data in :attr:`Pixmap.samples`. This is primarily used for calculation purposes. The following expressions are true: + + * *len(samples) == height * stride* + * *width * n == stride*. + + :type: int + + .. attribute:: irect + + Contains the :ref:`IRect` of the pixmap. + + :type: :ref:`IRect` + + .. attribute:: samples + + The color and (if :attr:`Pixmap.alpha` is true) transparency values for all pixels. It is an area of *width * height * n* bytes. Each n bytes define one pixel. Each successive n bytes yield another pixel in scanline order. Subsequent scanlines follow each other with no padding. E.g. for an RGBA colorspace this means, *samples* is a sequence of bytes like *..., R, G, B, A, ...*, and the four byte values R, G, B, A define one pixel. + + This area can be passed to other graphics libraries like PIL (Python Imaging Library) to do additional processing like saving the pixmap in other image formats. + + .. note:: + * The underlying data is a typically **large** memory area from which a *bytes* copy is made for this attribute: for example an RGB-rendered letter page has a samples size of almost 1.4 MB. So consider assigning a new variable if you repeatedly use it. + * Any changes to the underlying data are available only after again accessing this attribute. + + :type: bytes + + .. attribute:: size + + Contains *len(pixmap)*. This will generally equal *len(pix.samples)* plus some platform-specific value for defining other attributes of the object. + + :type: int + + .. attribute:: width + + .. attribute:: w + + Width of the region in pixels. + + :type: int + + .. attribute:: height + + .. attribute:: h + + Height of the region in pixels. + + :type: int + + .. attribute:: x + + X-coordinate of top-left corner + + :type: int + + .. attribute:: y + + Y-coordinate of top-left corner + + :type: int + + .. attribute:: n + + Number of components per pixel. This number depends on colorspace and alpha. If colorspace is not *None* (stencil masks), then *Pixmap.n - Pixmap.aslpha == pixmap.colorspace.n* is true. If colorspace is *None*, then *n == alpha == 1*. + + :type: int + + .. attribute:: xres + + Horizontal resolution in dpi (dots per inch). Please also see :data:`resolution`. + + :type: int + + .. attribute:: yres + + Vertical resolution in dpi. Please also see :data:`resolution`. + + :type: int + + .. attribute:: interpolate + + An information-only boolean flag set to *True* if the image will be drawn using "linear interpolation". If *False* "nearest neighbour sampling" will be used. + + :type: bool + +.. _ImageFiles: + +Supported Input Image Formats +----------------------------------------------- +The following file types are supported as **input** to construct pixmaps: **BMP, JPEG, GIF, TIFF, JXR, JPX**, **PNG**, **PAM** and all of the **Portable Anymap** family (**PBM, PGM, PNM, PPM**). This support is two-fold: + +1. Directly create a pixmap with *Pixmap(filename)* or *Pixmap(byterray)*. The pixmap will then have properties as determined by the image. + +2. Open such files with *fitz.open(...)*. The result will then appear as a document containing one single page. Creating a pixmap of this page offers all the options available in this context: apply a matrix, choose colorspace and alpha, confine the pixmap to a clip area, etc. + +**SVG images** are only supported via method 2 above, not directly as pixmaps. But remember: the result of this is a **raster image** as is always the case with pixmaps [#f1]_. + +.. _PixmapOutput: + +Supported Output Image Formats +--------------------------------------------------------------------------- +A number of image **output** formats are supported. You have the option to either write an image directly to a file (:meth:`Pixmap.writeImage`), or to generate a bytes object (:meth:`Pixmap.getImageData`). Both methods accept a 3-letter string identifying the desired format (**Format** column below). Please note that not all combinations of pixmap colorspace, transparency support (alpha) and image format are possible. + +========== =============== ========= ============== =========================== +**Format** **Colorspaces** **alpha** **Extensions** **Description** +========== =============== ========= ============== =========================== +pam gray, rgb, cmyk yes .pam Portable Arbitrary Map +pbm gray, rgb no .pbm Portable Bitmap +pgm gray, rgb no .pgm Portable Graymap +png gray, rgb yes .png Portable Network Graphics +pnm gray, rgb no .pnm Portable Anymap +ppm gray, rgb no .ppm Portable Pixmap +ps gray, rgb, cmyk no .ps Adobe PostScript Image +psd gray, rgb, cmyk yes .psd Adobe Photoshop Document +========== =============== ========= ============== =========================== + +.. note:: + * Not all image file types are supported (or at least common) on all OS platforms. E.g. PAM and the Portable Anymap formats are rare or even unknown on Windows. + * Especially pertaining to CMYK colorspaces, you can always convert a CMYK pixmap to an RGB pixmap with *rgb_pix = fitz.Pixmap(fitz.csRGB, cmyk_pix)* and then save that in the desired format. + * As can be seen, MuPDF's image support range is different for input and output. Among those supported both ways, PNG is probably the most popular. We recommend using Pillow whenever you face a support gap. + * We also recommend using "ppm" formats as input to tkinter's *PhotoImage* method like this: *tkimg = tkinter.PhotoImage(data=pix.getImageData("ppm"))* (also see the tutorial). This is **very** fast (**60 times** faster than PNG) and will work under Python 2 or 3. + + + +.. rubric:: Footnotes + +.. [#f1] If you need a **vector image** from the SVG, you must first convert it to a PDF. Try :meth:`Document.convertToPDF`. If this is not not good enough, look for other SVG-to-PDF conversion tools like the Python packages `svglib `_, `CairoSVG `_, `Uniconvertor `_ or the Java solution `Apache Batik `_. Have a look at our Wiki for more examples. + +.. [#f2] To also set the alpha property, add an additional step to this method by dropping or adding an alpha channel to the result. diff --git a/docs/point.rst b/docs/point.rst new file mode 100644 index 0000000..aa1be6d --- /dev/null +++ b/docs/point.rst @@ -0,0 +1,102 @@ +.. _Point: + +================ +Point +================ + +*Point* represents a point in the plane, defined by its x and y coordinates. + +============================ ============================================ +**Attribute / Method** **Description** +============================ ============================================ +:meth:`Point.distance_to` calculate distance to point or rect +:meth:`Point.norm` the Euclidean norm +:meth:`Point.transform` transform point with a matrix +:attr:`Point.abs_unit` same as unit, but positive coordinates +:attr:`Point.unit` point coordinates divided by *abs(point)* +:attr:`Point.x` the X-coordinate +:attr:`Point.y` the Y-coordinate +============================ ============================================ + +**Class API** + +.. class:: Point + + .. method:: __init__(self) + + .. method:: __init__(self, x, y) + + .. method:: __init__(self, point) + + .. method:: __init__(self, sequence) + + Overloaded constructors. + + Without parameters, *Point(0, 0)* will be created. + + With another point specified, a **new copy** will be crated, "sequence" is a Python sequence of 2 numbers (see :ref:`SequenceTypes`). + + :arg float x: x coordinate of the point + + :arg float y: y coordinate of the point + + .. method:: distance_to(x [, unit]) + + Calculate the distance to *x*, which may be :data:`point_like` or :data:`rect_like`. The distance is given in units of either pixels (default), inches, centimeters or millimeters. + + :arg point_like,rect_like x: to which to compute the distance. + + :arg str unit: the unit to be measured in. One of "px", "in", "cm", "mm". + + :rtype: float + :returns: the distance to *x*. If this is :data:`rect_like`, then the distance + + * is the length of the shortest line connecting to one of the rectangle sides + * is calculated to the **finite version** of it + * is zero if it **contains** the point + + .. method:: norm() + + *(New in version 1.16.0)* + + Return the Euclidean norm (the length) of the point as a vector. Equals result of function *abs()*. + + .. method:: transform(m) + + Apply a matrix to the point and replace it with the result. + + :arg matrix_like m: The matrix to be applied. + + :rtype: :ref:`Point` + + .. attribute:: unit + + Result of dividing each coordinate by *norm(point)*, the distance of the point to (0,0). This is a vector of length 1 pointing in the same direction as the point does. Its x, resp. y values are equal to the cosine, resp. sine of the angle this vector (and the point itself) has with the x axis. + + .. image:: images/img-point-unit.jpg + + :type: :ref:`Point` + + .. attribute:: abs_unit + + Same as :attr:`unit` above, replacing the coordinates with their absolute values. + + :type: :ref:`Point` + + .. attribute:: x + + The x coordinate + + :type: float + + .. attribute:: y + + The y coordinate + + :type: float + +.. note:: + + * This class adheres to the Python sequence protocol, so components can be accessed via their index, too. Also refer to :ref:`SequenceTypes`. + * Rectangles can be used with arithmetic operators -- see chapter :ref:`Algebra`. + diff --git a/docs/pymupdf-logo.jpg b/docs/pymupdf-logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..560e6f17a55c0e06fd3bf2c7ceef3288369ca10d GIT binary patch literal 6190 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 literal 0 HcmV?d00001 diff --git a/docs/quad.rst b/docs/quad.rst new file mode 100644 index 0000000..bdbf3a1 --- /dev/null +++ b/docs/quad.rst @@ -0,0 +1,143 @@ +.. _Quad: + +========== +Quad +========== + +Represents a four-sided mathematical shape (also called "quadrilateral" or "tetragon") in the plane, defined as a sequence of four :ref:`Point` objects ul, ur, ll, lr (conveniently called upper left, upper right, lower left, lower right). + +Quads can **be obtained** as results of text search methods (:meth:`Page.searchFor`), and they **are used** to define text marker annotations (see e.g. :meth:`Page.addSquigglyAnnot` and friends), and in several draw methods (like :meth:`Page.drawQuad` / :meth:`Shape.drawQuad`, :meth:`Page.drawOval`/ :meth`Shape.drawQuad`). + +.. note:: + + * If the corners of a rectangle are transformed with a **rotation**, **scale** or **translation** :ref:`Matrix`, then the resulting quad is **rectangular**, i.e. its corners again enclose angles of 90 degrees. Property :attr:`Quad.isRectangular` checks whether a quad can be thought of being the result of such an operation. This is not true for all matrices: e.g. shear matrices produce parallelograms, and non-invertible matrices deliver "degenerate" tetragons like triangles or lines. + + * Attribute :attr:`Quad.rect` obtains the envelopping rectangle. Vice versa, rectangles now have attributes :attr:`Rect.quad`, resp. :attr:`IRect.quad` to obtain their respective tetragon versions. + + +============================= ======================================================= +**Methods / Attributes** **Short Description** +============================= ======================================================= +:meth:`Quad.transform` transform with a matrix +:meth:`Quad.morph` transform with a point and matrix +:attr:`Quad.ul` upper left point +:attr:`Quad.ur` upper right point +:attr:`Quad.ll` lower left point +:attr:`Quad.lr` lower right point +:attr:`Quad.isConvex` true if quad is a convex set +:attr:`Quad.isEmpty` true if quad is an empty set +:attr:`Quad.isRectangular` true if quad is a (rotated) rectangle +:attr:`Quad.rect` smallest containing :ref:`Rect` +:attr:`Quad.width` the longest width value +:attr:`Quad.height` the longest height value +============================= ======================================================= + +**Class API** + +.. class:: Quad + + .. method:: __init__(self) + + .. method:: __init__(self, ul, ur, ll, lr) + + .. method:: __init__(self, quad) + + .. method:: __init__(self, sequence) + + Overloaded constructors: "ul", "ur", "ll", "lr" stand for :data:`point_like` objects (the four corners), "sequence" is a Python sequence with four :data:`point_like` objects. + + If "quad" is specified, the constructor creates a **new copy** of it. + + Without parameters, a quad consisting of 4 copies of *Point(0, 0)* is created. + + + .. method:: transform(matrix) + + Modify the quadrilateral by transforming each of its corners with a matrix. + + :arg matrix_like matrix: the matrix. + + .. method:: morph(fixpoint, matrix) + + *(New in version 1.17.0)* "Morph" the quad with a matrix-like using a point-like as fixed point. + + :arg point_like fixpoint: the point. + :arg matrix_like matrix: the matrix. + :returns: a new quad. The effect is achieved by using the following code:: + + >>> T = fitz.Matrix(1, 1).preTranslate(fixpoint.x, fixpoint.y) + >>> result = self * ~T * matrix * T + + So the quad is translated such, that fixpoint becomes the origin (0, 0), then the matrix is applied to it, and finally a reverse translation is done. + + Typical uses include rotating the quad around a desired point. + + .. attribute:: rect + + The smallest rectangle containing the quad, represented by the blue area in the following picture. + + .. image:: images/img-quads.jpg + + :type: :ref:`Rect` + + .. attribute:: ul + + Upper left point. + + :type: :ref:`Point` + + .. attribute:: ur + + Upper right point. + + :type: :ref:`Point` + + .. attribute:: ll + + Lower left point. + + :type: :ref:`Point` + + .. attribute:: lr + + Lower right point. + + :type: :ref:`Point` + + .. attribute:: isConvex + + *(New in version 1.16.1)* + + True if every line connecting two points of the quad is inside the quad. We in addition also make sure here, that the quad is not "degenerate", i.e. not all corners are on the same line (which would still qualify as convexity in the mathematical sense). + + :type: bool + + .. attribute:: isEmpty + + True if enclosed area is zero, which means that at least three of the four corners are on the same line. If this is false, the quad may still be degenerate or not look like a tetragon at all (triangles, parallelograms, trapezoids, ...). + + :type: bool + + .. attribute:: isRectangular + + True if all corner angles are 90 degrees. This implies that the quad is **convex and not empty**. + + :type: bool + + .. attribute:: width + + The maximum length of the top and the bottom side. + + :type: float + + .. attribute:: height + + The maximum length of the left and the right side. + + :type: float + +Remark +------ +This class adheres to the sequence protocol, so components can be dealt with via their indices, too. Also refer to :ref:`SequenceTypes`. + +We are still in process to extend algebraic operations to quads. Multiplication and division with / by numbers and matrices are already defined. Addition, subtraction and any unary operations may follow when we see an actual need. diff --git a/docs/rect.rst b/docs/rect.rst new file mode 100644 index 0000000..381b4d9 --- /dev/null +++ b/docs/rect.rst @@ -0,0 +1,270 @@ +.. _Rect: + +========== +Rect +========== + +*Rect* represents a rectangle defined by four floating point numbers x0, y0, x1, y1. They are treated as being coordinates of two diagonally opposite points. The first two numbers are regarded as the "top left" corner P\ :sub:`x0,y0` and P\ :sub:`x1,y1` as the "bottom right" one. However, these two properties need not coincide with their intuitive meanings -- read on. + +The following remarks are also valid for :ref:`IRect` objects: + +* Rectangle borders are always parallel to the respective X- and Y-axes. +* The constructing points can be anywhere in the plane -- they need not even be different, and e.g. "top left" need not be the geometrical "north-western" point. +* For any given quadruple of numbers, the geometrically "same" rectangle can be defined in (up to) four different ways: Rect(P\ :sub:`x0,y0`, P\ :sub:`x1,y1`\ ), Rect(P\ :sub:`x1,y1`, P\ :sub:`x0,y0`\ ), Rect(P\ :sub:`x0,y1`, P\ :sub:`x1,y0`\ ), and Rect(P\ :sub:`x1,y0`, P\ :sub:`x0,y1`\ ). + +Hence some useful classification: + +* A rectangle is called **finite** if *x0 <= x1* and *y0 <= y1* (i.e. the bottom right point is "south-eastern" to the top left one), otherwise **infinite**. Of the four alternatives above, **only one** is finite (disregarding degenerate cases). Please take into account, that in MuPDF's coordinate system the y-axis is oriented from **top to bottom**. + +* A rectangle is called **empty** if *x0 = x1* or *y0 = y1*, i.e. if its area is zero. + +.. note:: It sounds like a paradox: a rectangle can be both, infinite **and** empty ... + +============================= ======================================================= +**Methods / Attributes** **Short Description** +============================= ======================================================= +:meth:`Rect.contains` checks containment of another object +:meth:`Rect.getArea` calculate rectangle area +:meth:`Rect.getRectArea` calculate rectangle area +:meth:`Rect.includePoint` enlarge rectangle to also contain a point +:meth:`Rect.includeRect` enlarge rectangle to also contain another one +:meth:`Rect.intersect` common part with another rectangle +:meth:`Rect.intersects` checks for non-empty intersections +:meth:`Rect.morph` transform with a point and a matrix +:meth:`Rect.norm` the Euclidean norm +:meth:`Rect.normalize` makes a rectangle finite +:meth:`Rect.round` create smallest :ref:`Irect` containing rectangle +:meth:`Rect.transform` transform rectangle with a matrix +:attr:`Rect.bottom_left` bottom left point, synonym *bl* +:attr:`Rect.bottom_right` bottom right point, synonym *br* +:attr:`Rect.height` rectangle height +:attr:`Rect.irect` equals result of method *round()* +:attr:`Rect.isEmpty` whether rectangle is empty +:attr:`Rect.isInfinite` whether rectangle is infinite +:attr:`Rect.top_left` top left point, synonym *tl* +:attr:`Rect.top_right` top_right point, synonym *tr* +:attr:`Rect.quad` :ref:`Quad` made from rectangle corners +:attr:`Rect.width` rectangle width +:attr:`Rect.x0` top left corner's X-coordinate +:attr:`Rect.x1` bottom right corner's X-coordinate +:attr:`Rect.y0` top left corner's Y-coordinate +:attr:`Rect.y1` bottom right corner's Y-coordinate +============================= ======================================================= + +**Class API** + +.. class:: Rect + + .. method:: __init__(self) + + .. method:: __init__(self, x0, y0, x1, y1) + + .. method:: __init__(self, top_left, bottom_right) + + .. method:: __init__(self, top_left, x1, y1) + + .. method:: __init__(self, x0, y0, bottom_right) + + .. method:: __init__(self, rect) + + .. method:: __init__(self, sequence) + + Overloaded constructors: *top_left*, *bottom_right* stand for :data:`point_like` objects, "sequence" is a Python sequence type of 4 numbers (see :ref:`SequenceTypes`), "rect" means another :data:`rect_like`, while the other parameters mean coordinates. + + If "rect" is specified, the constructor creates a **new copy** of it. + + Without parameters, the empty rectangle *Rect(0.0, 0.0, 0.0, 0.0)* is created. + + .. method:: round() + + Creates the smallest containing :ref:`IRect`, This is **not** the same as simply rounding the rectangle's edges: The top left corner is rounded upwards and left while the bottom right corner is rounded downwards and to the right. + + >>> fitz.Rect(0.5, -0.01, 123.88, 455.123456).round() + IRect(0, -1, 124, 456) + + 1. If the rectangle is **infinite**, the "normalized" (finite) version of it will be taken. The result of this method is always a finite *IRect*. + 2. If the rectangle is **empty**, the result is also empty. + 3. **Possible paradox:** The result may be empty, **even if** the rectangle is **not** empty! In such cases, the result obviously does **not** contain the rectangle. This is because MuPDF's algorithm allows for a small tolerance (1e-3). Example: + + >>> r = fitz.Rect(100, 100, 200, 100.001) + >>> r.isEmpty # rect is NOT empty + False + >>> r.round() # but its irect IS empty! + fitz.IRect(100, 100, 200, 100) + >>> r.round().isEmpty + True + + :rtype: :ref:`IRect` + + .. method:: transform(m) + + Transforms the rectangle with a matrix and **replaces the original**. If the rectangle is empty or infinite, this is a no-operation. + + :arg m: The matrix for the transformation. + :type m: :ref:`Matrix` + + :rtype: *Rect* + :returns: the smallest rectangle that contains the transformed original. + + .. method:: intersect(r) + + The intersection (common rectangular area) of the current rectangle and *r* is calculated and **replaces the current** rectangle. If either rectangle is empty, the result is also empty. If *r* is infinite, this is a no-operation. + + :arg r: Second rectangle + :type r: :ref:`Rect` + + .. method:: includeRect(r) + + The smallest rectangle containing the current one and *r* is calculated and **replaces the current** one. If either rectangle is infinite, the result is also infinite. If one is empty, the other one will be taken as the result. + + :arg r: Second rectangle + :type r: :ref:`Rect` + + .. method:: includePoint(p) + + The smallest rectangle containing the current one and point *p* is calculated and **replaces the current** one. **Infinite rectangles remain unchanged.** To create a rectangle containing a series of points, start with (the empty) *fitz.Rect(p1, p1)* and successively perform *includePoint* operations for the other points. + + :arg p: Point to include. + :type p: :ref:`Point` + + .. method:: getRectArea([unit]) + + .. method:: getArea([unit]) + + Calculate the area of the rectangle and, with no parameter, equals *abs(rect)*. Like an empty rectangle, the area of an infinite rectangle is also zero. So, at least one of *fitz.Rect(p1, p2)* and *fitz.Rect(p2, p1)* has a zero area. + + :arg str unit: Specify required unit: respective squares of *px* (pixels, default), *in* (inches), *cm* (centimeters), or *mm* (millimeters). + :rtype: float + + .. method:: contains(x) + + Checks whether *x* is contained in the rectangle. It may be an *IRect*, *Rect*, *Point* or number. If *x* is an empty rectangle, this is always true. If the rectangle is empty this is always *False* for all non-empty rectangles and for all points. If *x* is a number, it will be checked against the four components. *x in rect* and *rect.contains(x)* are equivalent. + + :arg x: the object to check. + :type x: :ref:`IRect` or :ref:`Rect` or :ref:`Point` or number + + :rtype: bool + + .. method:: intersects(r) + + Checks whether the rectangle and a :data:`rect_like` "r" contain a common non-empty :ref:`Rect`. This will always be *False* if either is infinite or empty. + + :arg rect_like r: the rectangle to check. + + :rtype: bool + + .. method:: morph(fixpoint, matrix) + + *(New in version 1.17.0)* + + Return a new quad after applying a matrix to it using a fixed point. + + :arg point_like fixpoint: the fixed point. + :arg matrix_like matrix: the matrix. + :returns: a new :ref:`Quad`. This a wrapper for the same-named quad method. + + .. method:: norm() + + *(New in version 1.16.0)* + + Return the Euclidean norm of the rectangle treated as a vector of four numbers. + + .. method:: normalize() + + **Replace** the rectangle with its finite version. This is done by shuffling the rectangle corners. After completion of this method, the bottom right corner will indeed be south-eastern to the top left one. + + .. attribute:: irect + + Equals result of method *round()*. + + .. attribute:: top_left + + .. attribute:: tl + + Equals *Point(x0, y0)*. + + :type: :ref:`Point` + + .. attribute:: top_right + + .. attribute:: tr + + Equals *Point(x1, y0)*. + + :type: :ref:`Point` + + .. attribute:: bottom_left + + .. attribute:: bl + + Equals *Point(x0, y1)*. + + :type: :ref:`Point` + + .. attribute:: bottom_right + + .. attribute:: br + + Equals *Point(x1, y1)*. + + :type: :ref:`Point` + + .. attribute:: quad + + The quadrilateral *Quad(rect.tl, rect.tr, rect.bl, rect.br)*. + + :type: :ref:`Quad` + + .. attribute:: width + + Width of the rectangle. Equals *abs(x1 - x0)*. + + :rtype: float + + .. attribute:: height + + Height of the rectangle. Equals *abs(y1 - y0)*. + + :rtype: float + + .. attribute:: x0 + + X-coordinate of the left corners. + + :type: float + + .. attribute:: y0 + + Y-coordinate of the top corners. + + :type: float + + .. attribute:: x1 + + X-coordinate of the right corners. + + :type: float + + .. attribute:: y1 + + Y-coordinate of the bottom corners. + + :type: float + + .. attribute:: isInfinite + + *True* if rectangle is infinite, *False* otherwise. + + :type: bool + + .. attribute:: isEmpty + + *True* if rectangle is empty, *False* otherwise. + + :type: bool + +.. note:: + + * This class adheres to the Python sequence protocol, so components can be accessed via their index, too. Also refer to :ref:`SequenceTypes`. + * Rectangles can be used with arithmetic operators -- see chapter :ref:`Algebra`. + diff --git a/docs/replace-fonts.py b/docs/replace-fonts.py new file mode 100644 index 0000000..6c93b10 --- /dev/null +++ b/docs/replace-fonts.py @@ -0,0 +1,105 @@ +""" +Demo / Experimental: Replace the fonts in a PDF. + +""" +import fitz +import sys + +fname = sys.argv[1] + +doc = fitz.open(fname) # input PDF +out = fitz.open() # output PDF +csv = open("fonts.csv").read().splitlines() +all_fonts = [] # will contain: (old basefont name, Base14 name) +for f in csv: + all_fonts.append(f.split(";")) + + +def pdf_color(srgb): + """Create a PDF color triple from a given sRGB color integer. + """ + b = (srgb % 256) / 255 + srgb /= 256 + g = (srgb % 256) / 255 + srgb /= 256 + r = srgb / 255 + return (r, g, b) + + +def get_font(fontname): + """Lookup base fontname and return one of the "reserved" Base14 fontnames. + """ + for f in all_fonts: + if f[0] in fontname: # fontname may look like "ABCDEF+fontname..." + return f[1] + return "helv" # default: Helvetica + + +for page in doc: + if page.number % 10 == 0: # just entertainment messages every 10 pages + print("Processed %i pages" % page.number) + if not page._isWrapped: # check if input page geometry is dubious + page._wrapContents() + # for each input page create an output with same dimensions + outpage = out.newPage(width=page.rect.width, height=page.rect.height) + + # create a shape to write the output text to. + shape = outpage.newShape() + text_blocks = [] + image_blocks = [] + for block in page.getText("dict")["blocks"]: + if block["type"] == 0: + text_blocks.append(block) + else: + image_blocks.append(block) + + # insert the images first, so any text appears in foreground + for block in image_blocks: + outpage.insertImage(block["bbox"], stream=block["image"]) + print("Inserted an image on page", page.number) + + for block in text_blocks: # read text blocks + shape.drawRect(block["bbox"]) # draw all text on white background, + # because images may cover same area + + for line in block["lines"]: # for each line in the block ... + for span in line["spans"]: # for each span in the line ... + fontname = get_font(span["font"]) # get replacing fontname + fontsize = span["size"] + text = span["text"] + bbox = fitz.Rect(span["bbox"]) # text rectangle on input + text_size = fitz.getTextlength( # measure text length on output + text, fontname=fontname, fontsize=fontsize + ) + + # adjust fontsize if text is too long with new the font + if text_size > bbox.width: + fontsize *= bbox.width / text_size + try: + shape.insertText( # copy text to output page + bbox.bl, # insertion point on output page + text, # the text to insert + fontsize=fontsize, # fontsize + # decide on output font here: the place for sophistication! + fontname=fontname, + color=pdf_color(span["color"]), + ) + except ValueError: + print("Method 'insertText' failed:") + print( + "page:", + page.number, + "at", + span["bbox"][:2], + "text:", + span["text"], + ) + shape.finish(color=None, fill=(1, 1, 1)) # white for the text background + shape.commit() # write everything to the output page + +""" +Several other features can be added, like: +- copy over the input metadata dictionary +- copy over the input table of contents +""" +out.save("new-" + fname, deflate=True, garbage=4) diff --git a/docs/shape.rst b/docs/shape.rst new file mode 100644 index 0000000..e2bac93 --- /dev/null +++ b/docs/shape.rst @@ -0,0 +1,566 @@ +.. _Shape: + +Shape +================ + +This class allows creating interconnected graphical elements on a PDF page. Its methods have the same meaning and name as the corresponding :ref:`Page` methods. + +In fact, each :ref:`Page` draw method is just a convenience wrapper for (1) one shape draw method, (2) the :meth:`finish` method, and (3) the :meth:`commit` method. For page text insertion, only the :meth:`commit` method is invoked. If many draw and text operations are executed for a page, you should always consider using a Shape object. + +Several draw methods can be executed in a row and each one of them will contribute to one drawing. Once the drawing is complete, the :meth:`finish` method must be invoked to apply color, dashing, width, morphing and other attributes. + +**Draw** methods of this class (and :meth:`insertTextbox`) are logging the area they are covering in a rectangle (:attr:`Shape.rect`). This property can for instance be used to set :attr:`Page.CropBox`. + +**Text insertions** :meth:`insertText` and :meth:`insertTextbox` implicitely execute a "finish" and therefore only require :meth:`commit` to become effective. As a consequence, both include parameters for controlling prperties like colors, etc. + +================================ ===================================================== +**Method / Attribute** **Description** +================================ ===================================================== +:meth:`Shape.commit` update the page's contents +:meth:`Shape.drawBezier` draw a cubic Bezier curve +:meth:`Shape.drawCircle` draw a circle around a point +:meth:`Shape.drawCurve` draw a cubic Bezier using one helper point +:meth:`Shape.drawLine` draw a line +:meth:`Shape.drawOval` draw an ellipse +:meth:`Shape.drawPolyline` connect a sequence of points +:meth:`Shape.drawQuad` draw a quadrilateral +:meth:`Shape.drawRect` draw a rectangle +:meth:`Shape.drawSector` draw a circular sector or piece of pie +:meth:`Shape.drawSquiggle` draw a squiggly line +:meth:`Shape.drawZigzag` draw a zigzag line +:meth:`Shape.finish` finish a set of draw commands +:meth:`Shape.insertText` insert text lines +:meth:`Shape.insertTextbox` fit text into a rectangle +:attr:`Shape.doc` stores the page's document +:attr:`Shape.draw_cont` draw commands since last *finish()* +:attr:`Shape.height` stores the page's height +:attr:`Shape.lastPoint` stores the current point +:attr:`Shape.page` stores the owning page +:attr:`Shape.rect` rectangle surrounding drawings +:attr:`Shape.text_cont` accumulated text insertions +:attr:`Shape.totalcont` accumulated string to be stored in :data:`contents` +:attr:`Shape.width` stores the page's width +================================ ===================================================== + +**Class API** + +.. class:: Shape + + .. method:: __init__(self, page) + + Create a new drawing. During importing PyMuPDF, the *fitz.Page* object is being given the convenience method *newShape()* to construct a *Shape* object. During instantiation, a check will be made whether we do have a PDF page. An exception is otherwise raised. + + :arg page: an existing page of a PDF document. + :type page: :ref:`Page` + + .. method:: drawLine(p1, p2) + + Draw a line from :data:`point_like` objects *p1* to *p2*. + + :arg point_like p1: starting point + + :arg point_like p2: end point + + :rtype: :ref:`Point` + :returns: the end point, *p2*. + + .. index:: + pair: breadth; drawSquiggle + + .. method:: drawSquiggle(p1, p2, breadth=2) + + Draw a squiggly (wavy, undulated) line from :data:`point_like` objects *p1* to *p2*. An integer number of full wave periods will always be drawn, one period having a length of *4 * breadth*. The breadth parameter will be adjusted as necessary to meet this condition. The drawn line will always turn "left" when leaving *p1* and always join *p2* from the "right". + + :arg point_like p1: starting point + + :arg point_like p2: end point + + :arg float breadth: the amplitude of each wave. The condition *2 * breadth < abs(p2 - p1)* must be true to fit in at least one wave. See the following picture, which shows two points connected by one full period. + + :rtype: :ref:`Point` + :returns: the end point, *p2*. + + .. image:: images/img-breadth.png + + Here is an example of three connected lines, forming a closed, filled triangle. Little arrows indicate the stroking direction. + + .. image:: images/img-squiggly.png + + .. note:: Waves drawn are **not** trigonometric (sine / cosine). If you need that, have a look at `draw-sines.py `_. + + .. index:: + pair: breadth; drawZigzag + + .. method:: drawZigzag(p1, p2, breadth=2) + + Draw a zigzag line from :data:`point_like` objects *p1* to *p2*. An integer number of full zigzag periods will always be drawn, one period having a length of *4 * breadth*. The breadth parameter will be adjusted to meet this condition. The drawn line will always turn "left" when leaving *p1* and always join *p2* from the "right". + + :arg point_like p1: starting point + + :arg point_like p2: end point + + :arg float breadth: the amplitude of the movement. The condition *2 * breadth < abs(p2 - p1)* must be true to fit in at least one period. + + :rtype: :ref:`Point` + :returns: the end point, *p2*. + + .. method:: drawPolyline(points) + + Draw several connected lines between points contained in the sequence *points*. This can be used for creating arbitrary polygons by setting the last item equal to the first one. + + :arg sequence points: a sequence of :data:`point_like` objects. Its length must at least be 2 (in which case it is equivalent to *drawLine()*). + + :rtype: :ref:`Point` + :returns: *points[-1]* -- the last point in the argument sequence. + + .. method:: drawBezier(p1, p2, p3, p4) + + Draw a standard cubic Bezier curve from *p1* to *p4*, using *p2* and *p3* as control points. + + All arguments are :data:`point_like` \s. + + :rtype: :ref:`Point` + :returns: the end point, *p4*. + + .. note:: The points do not need to be different -- experiment a bit with some of them being equal! + + Example: + + .. image:: images/img-drawBezier.png + + .. method:: drawOval(tetra) + + Draw an "ellipse" inside the given tetragon (quadrilateral). If it is a square, a regular circle is drawn, a general rectangle will result in an ellipse. If a quadrilateral is used instead, a plethora of shapes can be the result. + + The drawing starts and ends at the middle point of the line connecting bottom-left and top-left corners in an anti-clockwise movement. + + :arg rect_like,quad_like tetra: :data:`rect_like` or :data:`quad_like`. + + *Changed in version 1.14.5:* tetragons are now also supported. + + :rtype: :ref:`Point` + :returns: the middle point of line from *rect.bl* to *rect.tl*, or from *quad.ll* to *quad.ul*, respectively. Look at just a few examples here, or at the *quad-show?.py* scripts in the PyMuPDF-Utilities repository. + + .. image:: images/img-drawquad.jpg + :scale: 50 + + .. method:: drawCircle(center, radius) + + Draw a circle given its center and radius. The drawing starts and ends at point *center - (radius, 0)* in an anti-clockwise movement. This corresponds to the middle point of the enclosing rectangle's left side. + + The method is a shortcut for *drawSector(center, start, 360, fullSector=False)*. To draw a circle in a clockwise movement, change the sign of the degree. + + :arg center: the center of the circle. + :type center: point_like + + :arg float radius: the radius of the circle. Must be positive. + + :rtype: :ref:`Point` + :returns: *center - (radius, 0)*. + + .. image:: images/img-drawcircle.jpg + :scale: 60 + + .. method:: drawCurve(p1, p2, p3) + + A special case of *drawBezier()*: Draw a cubic Bezier curve from *p1* to *p3*. On each of the two lines from *p1* to *p2* and from *p2* to *p3* one control point is generated. This guaranties that the curve's curvature does not change its sign. If these two connecting lines intersect with an angle of 90 degrees, then the resulting curve is a quarter ellipse (or quarter circle, if of same length) circumference. + + All arguments are :data:`point_like`. + + :rtype: :ref:`Point` + :returns: the end point, *p3*. + + Example: a filled quarter ellipse segment. + + .. image:: images/img-drawCurve.png + + .. index:: + pair: fullSector; drawSector + + .. method:: drawSector(center, point, angle, fullSector=True) + + Draw a circular sector, optionally connecting the arc to the circle's center (like a piece of pie). + + :arg point_like center: the center of the circle. + + :arg point_like point: one of the two end points of the pie's arc segment. The other one is calculated from the *angle*. + + :arg float angle: the angle of the sector in degrees. Used to calculate the other end point of the arc. Depending on its sign, the arc is drawn anti-clockwise (postive) or clockwise. + + :arg bool fullSector: whether to draw connecting lines from the ends of the arc to the circle center. If a fill color is specified, the full "pie" is colored, otherwise just the sector. + + :returns: the other end point of the arc. Can be used as starting point for a following invocation to create logically connected pies charts. + :rtype: :ref:`Point` + + Examples: + + .. image:: images/img-drawSector1.png + + .. image:: images/img-drawSector2.png + + + .. method:: drawRect(rect) + + Draw a rectangle. The drawing starts and ends at the top-left corner in an anti-clockwise movement. + + :arg rect_like rect: where to put the rectangle on the page. + + :rtype: :ref:`Point` + :returns: top-left corner of the rectangle. + + .. method:: drawQuad(quad) + + Draw a quadrilateral. The drawing starts and ends at the top-left corner (:attr:`Quad.ul`) in an anti-clockwise movement. It invokes :meth:`drawPolyline` with the argument *[ul, ll, lr, ur, ul]*. + + :arg quad_like quad: where to put the tetragon on the page. + + :rtype: :ref:`Point` + :returns: :attr:`Quad.ul`. + + .. index:: + pair: border_width; insertText + pair: color; insertText + pair: encoding; insertText + pair: fill; insertText + pair: fontfile; insertText + pair: fontname; insertText + pair: fontsize; insertText + pair: morph; insertText + pair: render_mode; insertText + pair: rotate; insertText + + .. method:: insertText(point, text, fontsize=11, fontname="helv", fontfile=None, set_simple=False, encoding=TEXT_ENCODING_LATIN, color=None, fill=None, render_mode=0, border_width=1, rotate=0, morph=None) + + Insert text lines start at *point*. + + :arg point_like point: the bottom-left position of the first character of *text* in pixels. It is important to understand, how this works in conjunction with the *rotate* parameter. Please have a look at the following picture. The small red dots indicate the positions of *point* in each of the four possible cases. + + .. image:: images/img-inserttext.jpg + :scale: 33 + + :arg str/sequence text: the text to be inserted. May be specified as either a string type or as a sequence type. For sequences, or strings containing line breaks *\n*, several lines will be inserted. No care will be taken if lines are too wide, but the number of inserted lines will be limited by "vertical" space on the page (in the sense of reading direction as established by the *rotate* parameter). Any rest of *text* is discarded -- the return code however contains the number of inserted lines. + + :arg int rotate: determines whether to rotate the text. Acceptable values are multiples of 90 degrees. Default is 0 (no rotation), meaning horizontal text lines oriented from left to right. 180 means text is shown upside down from **right to left**. 90 means anti-clockwise rotation, text running **upwards**. 270 (or -90) means clockwise rotation, text running **downwards**. In any case, *point* specifies the bottom-left coordinates of the first character's rectangle. Multiple lines, if present, always follow the reading direction established by this parameter. So line 2 is located **above** line 1 in case of *rotate = 180*, etc. + + :rtype: int + :returns: number of lines inserted. + + For a description of the other parameters see :ref:`CommonParms`. + + .. index:: + pair: align; insertTextbox + pair: border_width; insertTextbox + pair: color; insertTextbox + pair: encoding; insertTextbox + pair: expandtabs; insertTextbox + pair: fill; insertTextbox + pair: fontfile; insertTextbox + pair: fontname; insertTextbox + pair: fontsize; insertTextbox + pair: morph; insertTextbox + pair: render_mode; insertTextbox + pair: rotate; insertTextbox + + .. method:: insertTextbox(rect, buffer, fontsize=11, fontname="helv", fontfile=None, set_simple=False, encoding=TEXT_ENCODING_LATIN, color=None, fill=None, render_mode=0, border_width=1, expandtabs=8, align=TEXT_ALIGN_LEFT, rotate=0, morph=None) + + PDF only: Insert text into the specified rectangle. The text will be split into lines and words and then filled into the available space, starting from one of the four rectangle corners, which depends on *rotate*. Line feeds will be respected as well as multiple spaces will be. + + :arg rect_like rect: the area to use. It must be finite and not empty. + + :arg str/sequence buffer: the text to be inserted. Must be specified as a string or a sequence of strings. Line breaks are respected also when occurring in a sequence entry. + + :arg int align: align each text line. Default is 0 (left). Centered, right and justified are the other supported options, see :ref:`TextAlign`. Please note that the effect of parameter value *TEXT_ALIGN_JUSTIFY* is only achievable with "simple" (single-byte) fonts (including the :ref:`Base-14-Fonts`). Refer to :ref:`AdobeManual`, section 5.2.2, page 399. + + :arg int expandtabs: controls handling of tab characters *\t* using the *string.expandtabs()* method **per each line**. + + :arg int rotate: requests text to be rotated in the rectangle. This value must be a multiple of 90 degrees. Default is 0 (no rotation). Effectively, four different values are processed: 0, 90, 180 and 270 (= -90), each causing the text to start in a different rectangle corner. Bottom-left is 90, bottom-right is 180, and -90 / 270 is top-right. See the example how text is filled in a rectangle. This argument takes precedence over morphing. See the second example, which shows text first rotated left by 90 degrees and then the whole rectangle rotated clockwise around is lower left corner. + + :rtype: float + :returns: + **If positive or zero**: successful execution. The value returned is the unused rectangle line space in pixels. This may safely be ignored -- or be used to optimize the rectangle, position subsequent items, etc. + + **If negative**: no execution. The value returned is the space deficit to store text lines. Enlarge rectangle, decrease *fontsize*, decrease text amount, etc. + + .. image:: images/img-rotate.png + + .. image:: images/img-rot+morph.png + + For a description of the other parameters see :ref:`CommonParms`. + + .. index:: + pair: closePath; finish + pair: color; finish + pair: dashes; finish + pair: even_odd; finish + pair: fill; finish + pair: lineCap; finish + pair: lineJoin; finish + pair: morph; finish + pair: width; finish + + .. method:: finish(width=1, color=None, fill=None, lineCap=0, lineJoin=0, dashes=None, closePath=True, even_odd=False, morph=(fixpoint, matrix)) + + Finish a set of *draw*()* methods by applying :ref:`CommonParms` to all of them. This method also supports morphing the resulting compound drawing using a fixpoint :ref:`Point`. + + :arg sequence morph: morph the text or the compound drawing around some arbitrary :ref:`Point` *fixpoint* by applying :ref:`Matrix` *matrix* to it. This implies that *fixpoint* is a **fixed point** of this operation: it will not change its position. Default is no morphing (*None*). The matrix can contain any values in its first 4 components, *matrix.e == matrix.f == 0* must be true, however. This means that any combination of scaling, shearing, rotating, flipping, etc. is possible, but translations are not. + + :arg bool even_odd: request the **"even-odd rule"** for filling operations. Default is *False*, so that the **"nonzero winding number rule"** is used. These rules are alternative methods to apply the fill color where areas overlap. Only with fairly complex shapes a different behavior is to be expected with these rules. For an in-depth explanation, see :ref:`AdobeManual`, pp. 232 ff. Here is an example to demonstrate the difference. + + .. image:: images/img-even-odd.png + + .. note:: For each pixel in a drawing the following will happen: + + 1. Rule **"even-odd"** counts, how many areas are overlapping at a pixel. If this count is **odd** the pixel is regarded **inside**, if it is **even**, the pixel is **outside**. + + 2. Default rule **"nonzero winding"** also looks at the orientation of overlapping areas: it **adds 1** if an area is drawn anit-clockwise and it **subtracts 1** for clockwise areas. If the result is zero, the pixel is regarded **outside**, pixels with a non-zero count are **inside**. + + In the top two shapes, three circles are drawn in standard manner (anti-clockwise, look at the arrows). The lower two shapes contain one (top-left) circle drawn clockwise. As can be seen, area orientation is irrelevant for the even-odd rule. + + .. index:: + pair: overlay; commit + + .. method:: commit(overlay=True) + + Update the page's :data:`contents` with the accumulated draw commands and text insertions. If a *Shape* is not committed, the page will not be changed. + + The method will reset attributes :attr:`Shape.rect`, :attr:`lastPoint`, :attr:`draw_cont`, :attr:`text_cont` and :attr:`totalcont`. Afterwards, the shape object can be reused for the **same page**. + + :arg bool overlay: determine whether to put content in foreground (default) or background. Relevant only, if the page already has a non-empty :data:`contents` object. + + .. attribute:: doc + + For reference only: the page's document. + + :type: :ref:`Document` + + .. attribute:: page + + For reference only: the owning page. + + :type: :ref:`Page` + + .. attribute:: height + + Copy of the page's height + + :type: float + + .. attribute:: width + + Copy of the page's width. + + :type: float + + .. attribute:: draw_cont + + Accumulated command buffer for **draw methods** since last finish. + + :type: str + + .. attribute:: text_cont + + Accumulated text buffer. All **text insertions** go here. On :meth:`commit` this buffer will be appended to :attr:`totalcont`, so that text will never be covered by drawings in the same Shape. + + :type: str + + .. attribute:: rect + + Rectangle surrounding drawings. This attribute is at your disposal and may be changed at any time. Its value is set to *None* when a shape is created or committed. Every *draw** method, and :meth:`Shape.insertTextbox` update this property (i.e. **enlarge** the rectangle as needed). **Morphing** operations, however (:meth:`Shape.finish`, :meth:`Shape.insertTextbox`) are ignored. + + A typical use of this attribute would be setting :attr:`Page.CropBox` to this value, when you are creating shapes for later or external use. If you have not manipulated the attribute yourself, it should reflect a rectangle that contains all drawings so far. + + If you have used morphing and need a rectangle containing the morphed objects, use the following code:: + + >>> # assuming ... + >>> morph = (point, matrix) + >>> # ... recalculate the shape rectangle like so: + >>> shape.rect = (shape.rect - fitz.Rect(point, point)) * ~matrix + fitz.Rect(point, point) + + :type: :ref:`Rect` + + .. attribute:: totalcont + + Total accumulated command buffer for draws and text insertions. This will be used by :meth:`Shape.commit`. + + :type: str + + .. attribute:: lastPoint + + For reference only: the current point of the drawing path. It is *None* at *Shape* creation and after each *finish()* and *commit()*. + + :type: :ref:`Point` + +Usage +------ +A drawing object is constructed by *shape = page.newShape()*. After this, as many draw, finish and text insertions methods as required may follow. Each sequence of draws must be finished before the drawing is committed. The overall coding pattern looks like this:: + + >>> shape = page.newShape() + >>> shape.draw1(...) + >>> shape.draw2(...) + >>> ... + >>> shape.finish(width=..., color=..., fill=..., morph=...) + >>> shape.draw3(...) + >>> shape.draw4(...) + >>> ... + >>> shape.finish(width=..., color=..., fill=..., morph=...) + >>> ... + >>> shape.insertText* + >>> ... + >>> shape.commit() + >>> .... + +.. note:: + + 1. Each *finish()* combines the preceding draws into one logical shape, giving it common colors, line width, morphing, etc. If *closePath* is specified, it will also connect the end point of the last draw with the starting point of the first one. + + 2. To successfully create compound graphics, let each draw method use the end point of the previous one as its starting point. In the above pseudo code, *draw2* should hence use the returned :ref:`Point` of *draw1* as its starting point. Failing to do so, would automatically start a new path and *finish()* may not work as expected (but it won't complain either). + + 3. Text insertions may occur anywhere before the commit (they neither touch :attr:`Shape.draw_cont` nor :attr:`Shape.lastPoint`). They are appended to *Shape.totalcont* directly, whereas draws will be appended by *Shape.finish*. + + 4. Each *commit* takes all text insertions and shapes and places them in foreground or background on the page -- thus providing a way to control graphical layers. + + 5. **Only** *commit* **will update** the page's contents, the other methods are basically string manipulations. + +Examples +--------- +1. Create a full circle of pieces of pie in different colors:: + + shape = page.newShape() # start a new shape + cols = (...) # a sequence of RGB color triples + pieces = len(cols) # number of pieces to draw + beta = 360. / pieces # angle of each piece of pie + center = fitz.Point(...) # center of the pie + p0 = fitz.Point(...) # starting point + for i in range(pieces): + p0 = shape.drawSector(center, p0, beta, + fullSector=True) # draw piece + # now fill it but do not connect ends of the arc + shape.finish(fill=cols[i], closePath=False) + shape.commit() # update the page + +Here is an example for 5 colors: + +.. image:: images/img-cake.png + +2. Create a regular n-edged polygon (fill yellow, red border). We use *drawSector()* only to calculate the points on the circumference, and empty the draw command buffer again before drawing the polygon:: + + shape = page.newShape() # start a new shape + beta = -360.0 / n # our angle, drawn clockwise + center = fitz.Point(...) # center of circle + p0 = fitz.Point(...) # start here (1st edge) + points = [p0] # store polygon edges + for i in range(n): # calculate the edges + p0 = shape.drawSector(center, p0, beta) + points.append(p0) + shape.draw_cont = "" # do not draw the circle sectors + shape.drawPolyline(points) # draw the polygon + shape.finish(color=(1,0,0), fill=(1,1,0), closePath=False) + shape.commit() + +Here is the polygon for n = 7: + +.. image:: images/img-7edges.png + +.. _CommonParms: + +Common Parameters +------------------- + +**fontname** (*str*) + + In general, there are three options: + + 1. Use one of the standard :ref:`Base-14-Fonts`. In this case, *fontfile* **must not** be specified and *"Helvetica"* is used if this parameter is omitted, too. + 2. Choose a font already in use by the page. Then specify its **reference** name prefixed with a slash "/", see example below. + 3. Specify a font file present on your system. In this case choose an arbitrary, but new name for this parameter (without "/" prefix). + + If inserted text should re-use one of the page's fonts, use its reference name appearing in :meth:`getFontList` like so: + + Suppose the font list has the entry *[1024, 0, 'Type1', 'CJXQIC+NimbusMonL-Bold', 'R366']*, then specify *fontname = "/R366", fontfile = None* to use font *CJXQIC+NimbusMonL-Bold*. + +---- + +**fontfile** (*str*) + + File path of a font existing on your computer. If you specify *fontfile*, make sure you use a *fontname* **not occurring** in the above list. This new font will be embedded in the PDF upon *doc.save()*. Similar to new images, a font file will be embedded only once. A table of MD5 codes for the binary font contents is used to ensure this. + +---- + +**set_simple** (*bool*) + + Fonts installed from files are installed as **Type0** fonts by default. If you want to use 1-byte characters only, set this to true. This setting cannot be reverted. Subsequent changes are ignored. + +---- + +**fontsize** (*float*) + + Font size of text. This also determines the line height as *fontsize * 1.2*. + +---- + +**dashes** (*str*) + + Causes lines to be dashed. A continuous line with no dashes is drawn with *"[]0"* or *None*. For (the rather complex) details on how to achieve dashing effects, see :ref:`AdobeManual`, page 217. Simple versions look like *"[3 4]"*, which means dashes of 3 and gaps of 4 pixels length follow each other. *"[3 3]"* and *"[3]"* do the same thing. + +---- + +**color / fill** (*list, tuple*) + + Line and fill colors can be specified as tuples or list of of floats from 0 to 1. These sequences must have a length of 1 (GRAY), 3 (RGB) or 4 (CMYK). For GRAY colorspace, a single float instead of the unwieldy *(float,)* tuple spec is also accepted. + + To simplify color specification, method *getColor()* in *fitz.utils* may be used to get predefined RGB color triples by name. It accepts a string as the name of the color and returns the corresponding triple. The method knows over 540 color names -- see section :ref:`ColorDatabase`. + +---- + +**border_width** (*float*) + + Set the border width for text insertions. New in v1.14.9. Relevant only if the render mode argument is used with a value greater zero. + +---- + +**render_mode** (*int*) + + *New in version 1.14.9:* Integer in *range(8)* which controls the text appearance (:meth:`Shape.insertText` and :meth:`Shape.insertTextbox`). See page 398 in :ref:`AdobeManual`. New in v1.14.9. These methods now also differentiate between fill and stroke colors. + + * For default 0, only the text fill color is used to paint the text. For backward compatibility, using the *color* parameter instead also works. + * For render mode 1, only the border of each glyph (i.e. text character) is drawn with a thickness as set in argument *border_width*. The color chosen in the *color* argument is taken for this, the *fill* parameter is ignored. + * For render mode 2, the glyphs are filled and stroked, using both color parameters and the specified border width. You can use this value to simulate **bold text** without using another font: choose the same value for *fill* and *color* and an appropriate value for *border_width*. + * For render mode 3, the glyphs are neither stroked nor filled: the text becomes invisible. + + The following examples use border_width=0.3, together with a fontsize of 15. Stroke color is blue and fill color is some yellow. + + .. image:: images/img-rendermode.jpg + +---- + +**overlay** (*bool*) + + Causes the item to appear in foreground (default) or background. + +---- + +**morph** (*sequence*) + + Causes "morphing" of either a shape, created by the *draw*()* methods, or the text inserted by page methods *insertTextbox()* / *insertText()*. If not *None*, it must be a pair *(fixpoint, matrix)*, where *fixpoint* is a :ref:`Point` and *matrix* is a :ref:`Matrix`. The matrix can be anything except translations, i.e. *matrix.e == matrix.f == 0* must be true. The point is used as a fixed point for the matrix operation. For example, if *matrix* is a rotation or scaling, then *fixpoint* is its center. Similarly, if *matrix* is a left-right or up-down flip, then the mirroring axis will be the vertical, respectively horizontal line going through *fixpoint*, etc. + + .. note:: Several methods contain checks whether the to be inserted items will actually fit into the page (like :meth:`Shape.insertText`, or :meth:`Shape.drawRect`). For the result of a morphing operation there is however no such guaranty: this is entirely the rpogrammer's responsibility. + +---- + +**lineCap (deprecated: "roundCap")** (*int*) + + Controls the look of line ends. The default value 0 lets each line end at exactly the given coordinate in a sharp edge. A value of 1 adds a semi-circle to the ends, whose center is the end point and whose diameter is the line width. Value 2 adds a semi-square with an edge length of line width and a center of the line end. + + *Changed in version 1.14.15* + +---- + +**lineJoin** (*int*) + + *New in version 1.14.15:* Controls the way how line connections look like. This may be either as a sharp edge (0), a rounded join (1), or a cut-off edge (2, "butt"). + +---- + +**closePath** (*bool*) + + Causes the end point of a drawing to be automatically connected with the starting point (by a straight line). diff --git a/docs/text-lister.py b/docs/text-lister.py new file mode 100644 index 0000000..9241410 --- /dev/null +++ b/docs/text-lister.py @@ -0,0 +1,40 @@ +import fitz + + +def flags_decomposer(flags): + """Make font flags human readable.""" + l = [] + if flags & 2 ** 0: + l.append("superscript") + if flags & 2 ** 1: + l.append("italic") + if flags & 2 ** 2: + l.append("serifed") + else: + l.append("sans") + if flags & 2 ** 3: + l.append("monospaced") + else: + l.append("proportional") + if flags & 2 ** 4: + l.append("bold") + return ", ".join(l) + + +doc = fitz.open("text-tester.pdf") +page = doc[0] + +# read page text as a dictionary, suppressing extra spaces in CJK fonts +blocks = page.getText("dict", flags=11)["blocks"] +for b in blocks: # iterate through the text blocks + for l in b["lines"]: # iterate through the text lines + for s in l["spans"]: # iterate through the text spans + print("") + font_properties = "Font: '%s' (%s), size %g, color #%06x" % ( + s["font"], # font name + flags_decomposer(s["flags"]), # readable font flags + s["size"], # font size + s["color"], # font color + ) + print("Text: '%s'" % s["text"]) # simple print of text + print(font_properties) diff --git a/docs/textpage.rst b/docs/textpage.rst new file mode 100644 index 0000000..1c0b886 --- /dev/null +++ b/docs/textpage.rst @@ -0,0 +1,255 @@ +.. _TextPage: + +================ +TextPage +================ + +This class represents text and images shown on a document page. All MuPDF document types are supported. + +The usual ways to create a textpage are :meth:`DisplayList.getTextPage` and :meth:`Page.getTextPage`. Because there is a limited set of methods in this class, there exist wrappers in the :ref:`Page` class, which incorporate creating an intermediate text page and then invoke one of the following methods. The last column of this table shows these corresponding :ref:`Page` methods. + +For a description of what this class is all about, see Appendix 2. + +======================== ================================ ============================= +**Method** **Description** page getText or search method +======================== ================================ ============================= +:meth:`~.extractText` extract plain text "text" +:meth:`~.extractTEXT` synonym of previous "text" +:meth:`~.extractBLOCKS` plain text grouped in blocks "blocks" +:meth:`~.extractWORDS` all words with their bbox "words" +:meth:`~.extractHTML` page content in HTML format "html" +:meth:`~.extractJSON` page content in JSON format "json" +:meth:`~.extractXHTML` page content in XHTML format "xhtml" +:meth:`~.extractXML` page text in XML format "xml" +:meth:`~.extractDICT` page content in *dict* format "dict" +:meth:`~.extractRAWDICT` page content in *dict* format "rawdict" +:meth:`~.search` Search for a string in the page searchFor() +======================== ================================ ============================= + +**Class API** + +.. class:: TextPage + + .. method:: extractText + + .. method:: extractTEXT + + Return a string of the page's complete text. The text is UTF-8 unicode and in the same sequence as specified at the time of document creation. + + :rtype: str + + .. method:: extractBLOCKS + + Textpage content as a list of text lines grouped by block. Each list items looks like this:: + + (x0, y0, x1, y1, "lines in blocks", block_type, block_no) + + The first four entries are the block's bbox coordinates, *block_type* is 1 for an image block, 0 for text. *block_no* is the block sequence number. + + For an image block, its bbox and a text line with image meta information is included -- not the image data itself. + + This is a high-speed method with enough information to rebuild a desired text sequence. + + :rtype: list + + .. method:: extractWORDS + + Textpage content as a list of single words with bbox information. An item of this list looks like this:: + + (x0, y0, x1, y1, "word", block_no, line_no, word_no) + + Everything wrapped in spaces is treated as a *"word"* with this method. + + This is a high-speed method which e.g. allows extracting text from within a given rectangle. + + :rtype: list + + .. method:: extractHTML + + Textpage content in HTML format. This version contains complete formatting and positioning information. Images are included (encoded as base64 strings). You need an HTML package to interpret the output in Python. Your internet browser should be able to adequately display this information, but see :ref:`HTMLQuality`. + + :rtype: str + + .. method:: extractDICT + + Textpage content as a Python dictionary. Provides same information detail as HTML. See below for the structure. + + :rtype: dict + + .. method:: extractJSON + + Textpage content in JSON format. Created by *json.dumps(TextPage.extractDICT())*. It is included for backlevel compatibility. You will probably use this method ever only for outputting the result in some file. The method detects binary image data, like *bytearray* and *bytes* (Python 3 only) and converts them to base64 encoded strings on JSON output. + + :rtype: str + + .. method:: extractXHTML + + Textpage content in XHTML format. Text information detail is comparable with :meth:`extractTEXT`, but also contains images (base64 encoded). This method makes no attempt to re-create the original visual appearance. + + :rtype: str + + .. method:: extractXML + + Textpage content in XML format. This contains complete formatting information about every single character on the page: font, size, line, paragraph, location, color, etc. Contains no images. You probably need an XML package to interpret the output in Python. + + :rtype: str + + .. method:: extractRAWDICT + + Textpage content as a Python dictionary -- technically similar to :meth:`extractDICT`, and it contains that information as a subset (including any images). It provides additional detail down to each character, which makes using XML obsolete in many cases. See below for the structure. + + :rtype: dict + + .. method:: search(string, hit_max = 16, quads = False) + + Search for *string* and return a list of found locations. + + :arg str string: the string to search for. Upper / lower cases will all match. + :arg int hit_max: maximum number of returned hits (default 16). + :arg bool quads: return quadrilaterals instead of rectangles. + :rtype: list + :returns: a list of :ref:`Rect` or :ref:`Quad` objects, each surrounding a found *string* occurrence. The search string may contain spaces, it may therefore happen, that its parts are located on different lines. In this case, more than one rectangle (resp. quadrilateral) are returned. The method does **not support hyphenation**, so it will not find "meth-od" when searching for "method". + + Example: If the search for string "pymupdf" contains a hit like shown, then the corresponding entry will either be the blue rectangle, or, if *quads* was specified, *Quad(ul, ur, ll, lr)*. + + .. image:: images/img-quads.jpg + +.. _textpagedict: + +Dictionary Structure of :meth:`extractDICT` and :meth:`extractRAWDICT` +------------------------------------------------------------------------- + +.. image:: images/img-textpage.png + :scale: 66 + +Page Dictionary +~~~~~~~~~~~~~~~~~ +=============== ============================================ +**Key** **Value** +=============== ============================================ +width page width in pixels *(float)* +height page height in pixels *(float)* +blocks *list* of block dictionaries +=============== ============================================ + +Block Dictionaries +~~~~~~~~~~~~~~~~~~ +Blocks come in two different formats: **image blocks** and **text blocks**. + +**Image block:** + +=============== =============================================================== +**Key** **Value** +=============== =============================================================== +type 1 = image *(int)* +bbox block / image rectangle, formatted as *tuple(fitz.Rect)* +ext image type *(str)*, as file extension, see below +width original image width *(int)* +height original image height *(int)* +colorspace colorspace.n *(int)* +xres resolution in x-direction *(int)* +yres resolution in y-direction *(int)* +bpc bits per component *(int)* +image image content *(bytes or bytearray)* +=============== =============================================================== + +Possible values of key "ext" are "bmp", "gif", "jpeg", "jpx" (JPEG 2000), "jxr" (JPEG XR), "png", "pnm", and "tiff". + +.. note:: + + 1. In some error situations, all of the above values may be zero or empty. So, please be prepared to digest items like:: + + {"type": 1, "bbox": (0.0, 0.0, 0.0, 0.0), ..., "image": b""} + + + 2. :ref:`TextPage` and corresponding method :meth:`Page.getText` are **available for all document types**. Only for PDF documents, methods :meth:`Document.getPageImageList` / :meth:`Page.getImageList` offer some overlapping functionality as far as image lists are concerned. But both lists **may or may not** contain the same items. Any differences are most probably caused by one of the following: + + - "Inline" images (see page 352 of the :ref:`AdobeManual`) of a PDF page are contained in a textpage, but **not in** :meth:`Page.getImageList`. + - Image blocks in a textpage are generated for **every** image location -- whether or not there are any duplicates. This is in contrast to :meth:`Page.getImageList`, which will contain each image only once. + - Images mentioned in the page's :data:`object` definition will **always** appear in :meth:`Page.getImageList` [#f1]_. But it may happen, that there is no "display" command in the page's :data:`contents` (erroneously or on purpose). In this case the image will **not appear** in the textpage. + + +**Text block:** + +=============== ==================================================== +**Key** **Value** +=============== ==================================================== +type 0 = text *(int)* +bbox block rectangle, formatted as *tuple(fitz.Rect)* +lines *list* of text line dictionaries +=============== ==================================================== + +Line Dictionary +~~~~~~~~~~~~~~~~~ + +=============== ===================================================== +**Key** **Value** +=============== ===================================================== +bbox line rectangle, formatted as *tuple(fitz.Rect)* +wmode writing mode *(int)*: 0 = horizontal, 1 = vertical +dir writing direction *(list of floats)*: *[x, y]* +spans *list* of span dictionaries +=============== ===================================================== + +The value of key *"dir"* is a **unit vetor** and should be interpreted as follows: + +* *x*: positive = "left-right", negative = "right-left", 0 = neither +* *y*: positive = "top-bottom", negative = "bottom-top", 0 = neither + +The values indicate the "relative writing speed" in each direction, such that x\ :sup:`2` + y\ :sup:`2` = 1. In other words *dir = [cos(beta), sin(beta)]*, where *beta* is the writing angle relative to the horizontal. + +Span Dictionary +~~~~~~~~~~~~~~~~~ + +Spans contain the actual text. A line contains **more than one span only**, if it contains text with different font properties. + +*(Changed in version 1.14.17)* Spans now also have a *bbox* key (again). + +=============== ===================================================================== +**Key** **Value** +=============== ===================================================================== +bbox span rectangle, formatted as *tuple(fitz.Rect)* +font font name *(str)* +size font size *(float)* +flags font characteristics *(int)* +color text color in sRGB format *(int)* +text (only for :meth:`extractDICT`) text *(str)* +chars (only for :meth:`extractRAWDICT`) *list* of character dictionaries +=============== ===================================================================== + +*(New in version 1.16.0)* + +*"color"* is the text color encoded in sRGB format, e.g. 0xFF0000 for red. + +*"flags"* is an integer, encoding bools of font properties: + +* bit 0: superscripted (2\ :sup:`0`) +* bit 1: italic (2\ :sup:`1`) +* bit 2: serifed (2\ :sup:`2`) +* bit 3: monospaced (2\ :sup:`3`) +* bit 4: bold (2\ :sup:`4`) + +Test these characteristics like so: + +>>> if flags & 2**1: print("italic") +>>> # etc. + +Character Dictionary for :meth:`extractRAWDICT` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +We are currently providing the bbox in :data:`rect_like` format. In a future version, we might change that to :data:`quad_like`. This image shows the relationship between items in the following table: |textpagechar| + +.. |textpagechar| image:: images/img-textpage-char.png + :align: top + :scale: 66 + +=============== ========================================================= +**Key** **Value** +=============== ========================================================= +origin *tuple* coordinates of the character's bottom left point +bbox character rectangle, formatted as *tuple(fitz.Rect)* +c the character (unicode) +=============== ========================================================= + +.. rubric:: Footnotes + +.. [#f1] Image specifications for a PDF page are done in the page's sub-dictionary */Resources*. Being a text format specification, PDF does not prevent one from having arbitrary image entries in this dictionary -- whether actually in use by the page or not. On top of this, resource dictionaries can be **inherited** from the page's parent object -- like a node of the PDF's :data:`pagetree` or the :data:`catalog` object. So the PDF creator may e.g. define one file level */Resources* naming all images and fonts ever used by any page. In this case, :meth:`Page.getImageList` and :meth:`Page.getFontList` will always return the same lists for all pages. diff --git a/docs/textwriter.rst b/docs/textwriter.rst new file mode 100644 index 0000000..dc62f68 --- /dev/null +++ b/docs/textwriter.rst @@ -0,0 +1,106 @@ +.. _TextWriter: + +================ +TextWriter +================ + +*(New in v1.16.18)* This class represents a MuPDF *text* object. It can be thought of as a collection of text *"spans"*. Each span has its own starting position, font and font size. It is an elegant alternative for writing text to PDF pages, when compared with methods :meth:`Page.insertText` and friends: + +* **Improved text positioning:** Choose any point where insertion of a text span should start. Storing a text span returns the coordinates of the *last character* of the span. +* **Free font choice:** Each text span has its own font and fontsize. This lets you easily switch between font and font characteristics when composing a larger text. +* **Automatic fallback fonts:** If a character is not represented by the chosen font, alternative fonts are automatically searched. This significantly reduces the risk of seeing unprintable symbols in the output ("TOFUs"). PyMuPDF now also comes with the **universal font "Droid Sans Fallback Regular"**, which supports **all Latin** characters (incuding Cyrillic and Greek), and **all CJK** characters (Chinese, Japanese, Korean). +* **Cyrillic and Greek Support:** The :ref:`Base-14-fonts` have integrated support of Cyrillic and Greek characters **without specifying encoding.** If your text is a mixture of Latin, Greek and Cyrillic, it will be shown correctly if you just use e.g. font "Helvetica". +* **Transparency support:** Parameter *opacity* is supported. This offers a handy way to create watermark-style text. +* **Justified text:** Supported for any font -- not just simple fonts as in :meth:`Page.insertText`. +* **Reusability:** A TextWriter object exists independent from any page. It can be written multiple times, either to the same or to other pages, in the same or in different PDFs, choosing different colors or transparency. + +Using this object entails three steps: + +1. When **created**, a TextWriter requires a fixed **page rectangle** in relation to which it calculates text span positions. Text can be written to a page if and only if its size equals that of the TextWriter. +2. Store text in the TextWriter using methods :meth:`TextWriter.append` and :meth:`TextWriter.fillTextbox` as often as desired. +3. Output the TextWriter object on some PDF page with a compatible size. + +.. note:: Starting with version 1.17.0, TextWriters **do support** text rotation via the *morph* parameter of :meth:`TextWriter.writeText`. + +There also exists :meth:`Page.writeText` which lets you combine one or more TextWriters and jointly write them to a given rectangle and with a given rotation angle -- much like :meth:`Page.showPDFpage`. + +**Class API** + +.. class:: TextWriter + + .. method:: __init__(self, rect, opacity=1, color=None) + + :arg rect-like rect: rectangle internally used for text positioning computations. + :arg float opacity: sets the transparency for the text to store here. Values outside the interval ``[0, 1)`` will be ignored. A value of e.g. 0.5 means 50% transparency. + :arg float,sequ color: the color of the text. All colors are specified as floats *0 <= color <= 1*. A single float represents some gray level, a sequence implies the colorspace via its length. + + + .. method:: append(pos, text, font=None, fontsize=11, language=None) + + Add new text, usually (but not necessarily) representing a text span. + + :arg point_like pos: start position of the text, the bottom left point of the first character. + :arg str text: a string (Python 2: unicode is mandatory!) of arbitrary length. It will be written starting at position "pos". + :arg font: a :ref:`Font`. If omitted, ``fitz.Font("helv")`` will be used. + :arg float fontsize: the fontsize, a positive number, default 11. + :arg str language: the language to use, e.g. "en" for English. Meaningful values should be compliant with the ISO 639 standards 1, 2, 3 or 5. Reserved for future use: currently has no effect as far as we know. + + :returns: :attr:`textRect` and :attr:`lastPoint`. + + .. method:: fillTextbox(rect, text, pos=None, font=None, fontsize=11, align=0, warn=True) + + Fill a given rectangle with text. This is a convenience method to use as an alternative to :meth:`append`. + + :arg rect_like rect: the area to fill. No part of the text will appear outside of this. + :arg str,sequ text: the text. Can be specified as a (UTF-8) string or a list / tuple of strings. A string will first be converted to a list using *splitlines()*. Every list item will begin on a new line (forced line breaks). + :arg point_like pos: *(new in v1.17.3)* start storing at this point. Default is a point near rectangle top-left. + :arg font: the :ref:`Font`, default `fitz.Font("helv")`. + :arg float fontsize: the fontsize. + :arg int align: text alignment. Use one of TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT or TEXT_ALIGN_JUSTIFY. + :arg bool warn: warn on text overflow (default), or raise an exception. In any case, text not fitting will not be written. + + .. note:: Use these methods as often as is required -- there is no technical limit (except memory constraints of your system). You can also mix appends and text boxes and have multiple of both. Text positioning is controlled by the insertion point. There is no need to adhere to any order. + + + .. method:: writeText(page, opacity=None, color=None, morph=None, overlay=True) + + Write the TextWriter text to a page. + + :arg page: write to this :ref:`Page`. + :arg float opacity: override the value of the TextWriter for this output. + :arg sequ color: override the value of the TextWriter for this output. + :arg sequ morph: modify the text appearance by applying a matrix to it. If provided, this must be a sequence *(fixpoint, matrix)* with a point-like *fixpoint* and a matrix-like *matrix*. A typical example is rotating the text around *fixpoint*. + :arg bool overlay: put in foreground (default) or background. + + + .. attribute:: textRect + + The :ref:`Rect` currently occupied. This value changes when more text is added. + + .. attribute:: lastPoint + + The "cursor position" -- a :ref:`Point` -- after the last written character (its bottom-right). + + .. attribute:: opacity + + The text opacity (modifyable). + + .. attribute:: color + + The text color (modifyable). + + .. attribute:: rect + + The page rectangle for which this TextWriter was created. Must not be modified. + + +To see some demo scripts dealing with TextWriter, have a look at `this `_ repository. + + +.. note:: + + 1. Opacity and color apply to **all the text** in this object. + 2. If you need different colors / transpareny, you must create a separate TextWriter. Whenever you determine the color should change, simply append the text to the respective TextWriter using the previously returned :attr:`lastPoint` as position for the new text span. + 3. Appending items or text boxes can occur in arbitrary order: only the position parameter controls where text appears. + 4. Font and fontsize can freely vary within the same TextWriter. This can be used to let text with different properties appear on the same displayed line: just specify *pos* accordingly, and e.g. set it to :attr:`lastPoint` of the previously added item. + 5. You can use the *pos* argument of :meth:`TextWriter.fillTextbox` to indent the first line, so its text may continue any preceeding one in a continuous manner. diff --git a/docs/tools.rst b/docs/tools.rst new file mode 100644 index 0000000..eaf4fdf --- /dev/null +++ b/docs/tools.rst @@ -0,0 +1,248 @@ +.. _Tools: + +Tools +================ + +This class is a collection of utility methods and attributes, mainly around memory management. To simplify and speed up its use, it is automatically instantiated under the name *TOOLS* when PyMuPDF is imported. + +================================== ================================================= +**Method / Attribute** **Description** +================================== ================================================= +:meth:`Tools.gen_id` generate a unique identifyer +:meth:`Tools.image_profile` report basic image properties +:meth:`Tools.store_shrink` shrink the storables cache [#f1]_ +:meth:`Tools.mupdf_warnings` return the accumulated MuPDF warnings +:meth:`Tools.mupdf_display_errors` return the accumulated MuPDF warnings +:meth:`Tools.reset_mupdf_warnings` empty MuPDF messages on STDOUT +:meth:`Tools.set_aa_level` set the anti-aliasing values +:meth:`Tools.show_aa_level` return the anti-aliasing values +:attr:`Tools.fitz_config` configuration settings of PyMuPDF +:attr:`Tools.store_maxsize` maximum storables cache size +:attr:`Tools.store_size` current storables cache size +================================== ================================================= + +**Class API** + +.. class:: Tools + + .. method:: gen_id() + + A convenience method returning a unique positive integer which will increase by 1 on every invocation. Example usages include creating unique keys in databases - its creation should be faster than using timestamps by an order of magnitude. + + .. note:: MuPDF has dropped support for this in v1.14.0, so we have re-implemented a similar function with the following differences: + + * It is not part of MuPDF's global context and not threadsafe (not an issue because we do not support threads in PyMuPDF anyway). + * It is implemented as *int*. This means that the maximum number is *sys.maxsize*. Should this number ever be exceeded, the counter starts over again at 1. + + :rtype: int + :returns: a unique positive integer. + + .. method:: image_profile(stream) + + *(New in v1.16.17)* Show important properties of an image provided as a memory area. Its main purpose is to avoid using other Python packages just to determine basic properties. + + :arg bytes,bytearray stream: the image data. + :rtype: dict + :returns: a dictionary with the keys "width", "height", "xres", "yres", "colorspace" (the *colorspace.n* value, number of colorants), "cs-name" (the *colorspace.name* value), "bpc", "ext" (image type as file extension). The values for these keys are the same as returned by :meth:`Document.extractImage`. Please also have a look at :data:`resolution`. + + .. note:: + + * For some "exotic" images (FAX encodings, RAW formats and the like), this method will not work and return *None*. You can however still work with such images in PyMuPDF, e.g. by using :meth:`Document.extractImage` or create pixmaps via ``Pixmap(doc, xref)``. These methods will automatically convert exotic images to the PNG format before returning results. + + * Some examples:: + + In [1]: import fitz + In [2]: stream = open(, "rb").read() + In [3]: fitz.TOOLS.image_profile(stream) + Out[3]: + {'width': 439, + 'height': 501, + 'xres': 96, + 'yres': 96, + 'colorspace': 3, + 'bpc': 8, + 'ext': 'jpeg', + 'cs-name': 'DeviceRGB'} + In [4]: doc=fitz.open() + In [5]: stream = doc.xrefStreamRaw(5) # no decompression! + In [6]: fitz.TOOLS.image_profile(stream) + Out[6]: + {'width': 816, + 'height': 1056, + 'xres': 96, + 'yres': 96, + 'colorspace': 1, + 'bpc': 8, + 'ext': 'jpeg', + 'cs-name': 'DeviceGray'} + + .. method:: store_shrink(percent) + + Reduce the storables cache by a percentage of its current size. + + :arg int percent: the percentage of current size to free. If 100+ the store will be emptied, if zero, nothing will happen. MuPDF's caching strategy is "least recently used", so low-usage elements get deleted first. + + :rtype: int + :returns: the new current store size. Depending on the situation, the size reduction may be larger than the requested percentage. + + .. method:: show_aa_level() + + *(New in version 1.16.14)* Return the current anti-aliasing values. These values control the rendering quality of graphics and text elements. + + :rtype: dict + :returns: A dictionary with the following initial content: ``{'graphics': 8, 'text': 8, 'graphics_min_line_width': 0.0}``. + + + .. method:: set_aa_level(level) + + *(New in version 1.16.14)* Set the new number of bits to use for anti-aliasing. The same value is taken currently for graphics and text rendering. This might change in a future MuPDF release. + + :arg int level: an integer ranging between 0 and 8. Value outside this range will be silently changed to valid values. The value will remain in effect throughout the current session or until changed again. + + + .. method:: reset_mupdf_warnings() + + *(New in version 1.16.0)* + + Empty MuPDF warnings message buffer. + + + .. method:: mupdf_display_errors(value=None) + + *(New in version 1.16.8)* + + Show or set whether MuPDF errors should be displayed. + + :arg bool value: if not a bool, the current setting is returned. If true, MuPDF errors will be shown on *sys.stderr*, otherwise suppressed. In any case, messages continue to be stored in the warnings store. Upon import of PyMuPDF this value is *True*. + + :returns: *True* or *False* + + + .. method:: mupdf_warnings(reset=True) + + *(New in version 1.16.0)* + + Return all stored MuPDF messages as a string with interspersed line-breaks. + + :arg bool reset: *(new in version 1.16.7)* whether to automatically empty the store. + + + .. attribute:: fitz_config + + A dictionary containing the actual values used for configuring PyMuPDF and MuPDF. Also refer to the installation chapter. This is an overview of the keys, each of which describes the status of a support aspect. + + ================= =================================================== + **Key** **Support included for ...** + ================= =================================================== + plotter-g Gray colorspace rendering + plotter-rgb RGB colorspace rendering + plotter-cmyk CMYK colorspcae rendering + plotter-n overprint rendering + pdf PDF documents + xps XPS documents + svg SVG documents + cbz CBZ documents + img IMG documents + html HTML documents + epub EPUB documents + jpx JPEG2000 images + js JavaScript + tofu all TOFU fonts + tofu-cjk CJK font subset (China, Japan, Korea) + tofu-cjk-ext CJK font extensions + tofu-cjk-lang CJK font language extensions + tofu-emoji TOFU emoji fonts + tofu-historic TOFU historic fonts + tofu-symbol TOFU symbol fonts + tofu-sil TOFU SIL fonts + icc ICC profiles + py-memory using Python memory management [#f2]_ + base14 Base-14 fonts (should always be true) + ================= =================================================== + + For an explanation of the term "TOFU" see `this Wikipedia article `_.:: + + In [1]: import fitz + In [2]: TOOLS.fitz_config + Out[2]: + {'plotter-g': True, + 'plotter-rgb': True, + 'plotter-cmyk': True, + 'plotter-n': True, + 'pdf': True, + 'xps': True, + 'svg': True, + 'cbz': True, + 'img': True, + 'html': True, + 'epub': True, + 'jpx': True, + 'js': True, + 'tofu': False, + 'tofu-cjk': True, + 'tofu-cjk-ext': False, + 'tofu-cjk-lang': False, + 'tofu-emoji': False, + 'tofu-historic': False, + 'tofu-symbol': False, + 'tofu-sil': False, + 'icc': True, + 'py-memory': True, # (False if Python 2) + 'base14': True} + + :rtype: dict + + .. attribute:: store_maxsize + + Maximum storables cache size in bytes. PyMuPDF is generated with a value of 268'435'456 (256 MB, the default value), which you should therefore always see here. If this value is zero, then an "unlimited" growth is permitted. + + :rtype: int + + .. attribute:: store_size + + Current storables cache size in bytes. This value may change (and will usually increase) with every use of a PyMuPDF function. It will (automatically) decrease only when :attr:`Tools.store_maxize` is going to be exceeded: in this case, MuPDF will evict low-usage objects until the value is again in range. + + :rtype: int + +Example Session +---------------- + +.. highlight:: python + +:: + >>> import fitz + # print the maximum and current cache sizes + >>> fitz.TOOLS.store_maxsize + 268435456 + >>> fitz.TOOLS.store_size + 0 + >>> doc = fitz.open("demo1.pdf") + # pixmap creation puts lots of object in cache (text, images, fonts), + # apart from the pixmap itself + >>> pix = doc[0].getPixmap(alpha=False) + >>> fitz.TOOLS.store_size + 454519 + # release (at least) 50% of the storage + >>> fitz.TOOLS.store_shrink(50) + 13471 + >>> fitz.TOOLS.store_size + 13471 + # get a few unique numbers + >>> fitz.TOOLS.gen_id() + 1 + >>> fitz.TOOLS.gen_id() + 2 + >>> fitz.TOOLS.gen_id() + 3 + # close document and see how much cache is still in use + >>> doc.close() + >>> fitz.TOOLS.store_size + 0 + >>> + + +.. rubric:: Footnotes + +.. [#f1] This memory area is internally used by MuPDF, and it serves as a cache for objects that have already been read and interpreted, thus improving performance. The most bulky object types are images and also fonts. When an application starts up the MuPDF library (in our case this happens as part of *import fitz*), it must specify a maximum size for this area. PyMuPDF's uses the default value (256 MB) to limit memory consumption. Use the methods here to control or investigate store usage. For example: even after a document has been closed and all related objects have been deleted, the store usage may still not drop down to zero. So you might want to enforce that before opening another document. + +.. [#f2] Optionally, all dynamic management of memory can be done using Python C-level calls. MuPDF offers a hook to insert user-preferred memory managers. We are using option this for Python version 3 since PyMuPDF v1.13.19. At the same time, all memory allocation in PyMuPDF itself is also routed to Python (i.e. no more direct *malloc()* calls in the code). We have seen improved memory usage and slightly reduced runtimes with this option set. If you want to change this, you can set *#define JM_MEMORY 0* (uses standard C malloc, or 1 for Python allocation )in file *fitz.i* and then generate PyMuPDF. diff --git a/docs/tutorial.rst b/docs/tutorial.rst new file mode 100644 index 0000000..9dce148 --- /dev/null +++ b/docs/tutorial.rst @@ -0,0 +1,351 @@ +.. _Tutorial: + +========= +Tutorial +========= + +.. highlight:: python + +This tutorial will show you the use of PyMuPDF, MuPDF in Python, step by step. + +Because MuPDF supports not only PDF, but also XPS, OpenXPS, CBZ, CBR, FB2 and EPUB formats, so does PyMuPDF [#f1]_. Nevertheless, for the sake of brevity we will only talk about PDF files. At places where indeed only PDF files are supported, this will be mentioned explicitely. + +Importing the Bindings +========================== +The Python bindings to MuPDF are made available by this import statement. We also show here how your version can be checked:: + + >>> import fitz + >>> print(fitz.__doc__) + PyMuPDF 1.16.0: Python bindings for the MuPDF 1.16.0 library. + Version date: 2019-07-28 07:30:14. + Built for Python 3.7 on win32 (64-bit). + + +Opening a Document +====================== +To access a supported document, it must be opened with the following statement:: + + doc = fitz.open(filename) # or fitz.Document(filename) + +This creates the :ref:`Document` object *doc*. *filename* must be a Python string specifying the name of an existing file. + +It is also possible to open a document from memory data, or to create a new, empty PDF. See :ref:`Document` for details. + +A document contains many attributes and functions. Among them are meta information (like "author" or "subject"), number of total pages, outline and encryption information. + +Some :ref:`Document` Methods and Attributes +============================================= + +=========================== ========================================== +**Method / Attribute** **Description** +=========================== ========================================== +:attr:`Document.pageCount` the number of pages (*int*) +:attr:`Document.metadata` the metadata (*dict*) +:meth:`Document.getToC` get the table of contents (*list*) +:meth:`Document.loadPage` read a :ref:`Page` +=========================== ========================================== + +Accessing Meta Data +======================== +PyMuPDF fully supports standard metadata. :attr:`Document.metadata` is a Python dictionary with the following keys. It is available for **all document types**, though not all entries may always contain data. For details of their meanings and formats consult the respective manuals, e.g. :ref:`AdobeManual` for PDF. Further information can also be found in chapter :ref:`Document`. The meta data fields are strings or *None* if not otherwise indicated. Also be aware that not all of them always contain meaningful data -- even if they are not *None*. + +============== ================================= +**Key** **Value** +============== ================================= +producer producer (producing software) +format format: 'PDF-1.4', 'EPUB', etc. +encryption encryption method used if any +author author +modDate date of last modification +keywords keywords +title title +creationDate date of creation +creator creating application +subject subject +============== ================================= + +.. note:: Apart from these standard metadata, **PDF documents** starting from PDF version 1.4 may also contain so-called *"metadata streams"*. Information in such streams is coded in XML. PyMuPDF deliberately contains no XML components, so we do not directly support access to information contained therein. But you can extract the stream as a whole, inspect or modify it using a package like `lxml `_ and then store the result back into the PDF. If you want, you can also delete these data altogether. + +.. note:: There are two utility scripts in the repository that `import (PDF only) `_ resp. `export `_ metadata from resp. to CSV files. + +Working with Outlines +========================= +The easiest way to get all outlines (also called "bookmarks") of a document, is by loading its *table of contents*:: + + toc = doc.getToC() + +This will return a Python list of lists *[[lvl, title, page, ...], ...]* which looks much like a conventional table of contents found in books. + +*lvl* is the hierarchy level of the entry (starting from 1), *title* is the entry's title, and *page* the page number (1-based!). Other parameters describe details of the bookmark target. + +.. note:: There are two utility scripts in the repository that `import (PDF only) `_ resp. `export `_ table of contents from resp. to CSV files. + +Working with Pages +====================== +:ref:`Page` handling is at the core of MuPDF's functionality. + +* You can render a page into a raster or vector (SVG) image, optionally zooming, rotating, shifting or shearing it. +* You can extract a page's text and images in many formats and search for text strings. +* For PDF documents many more methods are available to add text or images to pages. + +First, a :ref:`Page` must be created. This is a method of :ref:`Document`:: + + page = doc.loadPage(pno) # loads page number 'pno' of the document (0-based) + page = doc[pno] # the short form + +Any integer *-inf < pno < pageCount* is possible here. Negative numbers count backwards from the end, so *doc[-1]* is the last page, like with Python sequences. + +Some more advanced way would be using the document as an **iterator** over its pages:: + + for page in doc: + # do something with 'page' + + # ... or read backwards + for page in reversed(doc): + # do something with 'page' + + # ... or even use 'slicing' + for page in doc.pages(start, stop, step): + # do something with 'page' + + +Once you have your page, here is what you would typically do with it: + +Inspecting the Links, Annotations or Form Fields of a Page +----------------------------------------------------------- +Links are shown as "hot areas" when a document is displayed with some viewer software. If you click while your cursor shows a hand symbol, you will usually be taken to the taget that is encoded in that hot area. Here is how to get all links:: + + # get all links on a page + links = page.getLinks() + +*links* is a Python list of dictionaries. For details see :meth:`Page.getLinks`. + +You can also use an iterator which emits one link at a time:: + + for link in page.links(): + # do something with 'link' + +If dealing with a PDF document page, there may also exist annotations (:ref:`Annot`) or form fields (:ref:`Widget`), each of which have their own iterators:: + + for annot in page.annots(): + # do something with 'annot' + + for field in page.widgets(): + # do something with 'field' + + +Rendering a Page +----------------------- +This example creates a **raster** image of a page's content:: + + pix = page.getPixmap() + +*pix* is a :ref:`Pixmap` object which (in this case) contains an **RGB** image of the page, ready to be used for many purposes. Method :meth:`Page.getPixmap` offers lots of variations for controlling the image: resolution, colorspace (e.g. to produce a grayscale image or an image with a subtractive color scheme), transparency, rotation, mirroring, shifting, shearing, etc. For example: to create an **RGBA** image (i.e. containing an alpha channel), specify *pix = page.getPixmap(alpha=True)*. + +A :ref:`Pixmap` contains a number of methods and attributes which are referenced below. Among them are the integers *width*, *height* (each in pixels) and *stride* (number of bytes of one horizontal image line). Attribute *samples* represents a rectangular area of bytes representing the image data (a Python *bytes* object). + +.. note:: You can also create a **vector** image of a page by using :meth:`Page.getSVGimage`. Refer to this `Wiki `_ for details. + +Saving the Page Image in a File +----------------------------------- +We can simply store the image in a PNG file:: + + pix.writeImage("page-%i.png" % page.number) + +Displaying the Image in GUIs +------------------------------------------- +We can also use it in GUI dialog managers. :attr:`Pixmap.samples` represents an area of bytes of all the pixels as a Python bytes object. Here are some examples, find more in the `examples `_ directory. + +wxPython +~~~~~~~~~~~~~ +Consult their documentation for adjustments to RGB(A) pixmaps and, potentially, specifics for your wxPython release:: + + if pix.alpha: + bitmap = wx.Bitmap.FromBufferRGBA(pix.width, pix.height, pix.samples) + else: + bitmap = wx.Bitmap.FromBuffer(pix.width, pix.height, pix.samples) + +Tkinter +~~~~~~~~~~ +Please also see section 3.19 of the `Pillow documentation `_:: + + from PIL import Image, ImageTk + + # set the mode depending on alpha + mode = "RGBA" if pix.alpha else "RGB" + img = Image.frombytes(mode, [pix.width, pix.height], pix.samples) + tkimg = ImageTk.PhotoImage(img) + +The following **avoids using Pillow**:: + + # remove alpha if present + pix1 = fitz.Pixmap(pix, 0) if pix.alpha else pix # PPM does not support transparency + imgdata = pix1.getImageData("ppm") # extremely fast! + tkimg = tkinter.PhotoImage(data = imgdata) + +If you are looking for a complete Tkinter script paging through **any supported** document, `here it is! `_ It can also zoom into pages, and it runs under Python 2 or 3. It requires the extremely handy `PySimpleGUI `_ pure Python package. + +PyQt4, PyQt5, PySide +~~~~~~~~~~~~~~~~~~~~~ +Please also see section 3.16 of the `Pillow documentation `_:: + + from PIL import Image, ImageQt + + # set the mode depending on alpha + mode = "RGBA" if pix.alpha else "RGB" + img = Image.frombytes(mode, [pix.width, pix.height], pix.samples) + qtimg = ImageQt.ImageQt(img) + +Again, you also can get along **without using PIL** if you use the pixmap *stride* property:: + + from PyQt.QtGui import QImage + + # set the correct QImage format depending on alpha + fmt = QImage.Format_RGBA8888 if pix.alpha else QImage.Format_RGB888 + qtimg = QImage(pix.samples, pix.width, pix.height, pix.stride, fmt) + + +Extracting Text and Images +--------------------------- +We can also extract all text, images and other information of a page in many different forms, and levels of detail:: + + text = page.getText(opt) + +Use one of the following strings for *opt* to obtain different formats [#f2]_: + +* *"text"*: (default) plain text with line breaks. No formatting, no text position details, no images. + +* *"blocks"*: generate a list of text blocks (= paragraphs). + +* *"words"*: generate a list of words (strings not containing spaces). + +* *"html"*: creates a full visual version of the page including any images. This can be displayed with your internet browser. + +* *"dict"* / *"json"*: same information level as HTML, but provided as a Python dictionary or resp. JSON string. See :meth:`TextPage.extractDICT` resp. :meth:`TextPage.extractJSON` for details of its structure. + +* *"rawdict"*: a super-set of :meth:`TextPage.extractDICT`. It additionally provides character detail information like XML. See :meth:`TextPage.extractRAWDICT` for details of its structure. + +* *"xhtml"*: text information level as the TEXT version but includes images. Can also be displayed by internet browsers. + +* *"xml"*: contains no images, but full position and font information down to each single text character. Use an XML module to interpret. + +To give you an idea about the output of these alternatives, we did text example extracts. See :ref:`Appendix2`. + +Searching for Text +------------------- +You can find out, exactly where on a page a certain text string appears:: + + areas = page.searchFor("mupdf", hit_max = 16) + +This delivers a list of up to 16 rectangles (see :ref:`Rect`), each of which surrounds one occurrence of the string "mupdf" (case insensitive). You could use this information to e.g. highlight those areas (PDF only) or create a cross reference of the document. + +Please also do have a look at chapter :ref:`cooperation` and at demo programs `demo.py `_ and `demo-lowlevel.py `_. Among other things they contain details on how the :ref:`TextPage`, :ref:`Device` and :ref:`DisplayList` classes can be used for a more direct control, e.g. when performance considerations suggest it. + +PDF Maintenance +================== +PDFs are the only document type that can be **modified** using PyMuPDF. Other file types are read-only. + +However, you can convert **any document** (including images) to a PDF and then apply all PyMuPDF features to the conversion result. Find out more here :meth:`Document.convertToPDF`, and also look at the demo script `pdf-converter.py `_ which can convert any supported document to PDF. + +:meth:`Document.save()` always stores a PDF in its current (potentially modified) state on disk. + +You normally can choose whether to save to a new file, or just append your modifications to the existing one ("incremental save"), which often is very much faster. + +The following describes ways how you can manipulate PDF documents. This description is by no means complete: much more can be found in the following chapters. + +Modifying, Creating, Re-arranging and Deleting Pages +------------------------------------------------------- +There are several ways to manipulate the so-called **page tree** (a structure describing all the pages) of a PDF: + +:meth:`Document.deletePage` and :meth:`Document.deletePageRange` delete pages. + +:meth:`Document.copyPage`, :meth:`Document.fullcopyPage` and :meth:`Document.movePage` copy or move a page to other locations within the same document. + +:meth:`Document.select` shrinks a PDF down to selected pages. Parameter is a sequence [#f3]_ of the page numbers that you want to keep. These integers must all be in range *0 <= i < pageCount*. When executed, all pages **missing** in this list will be deleted. Remaining pages will occur **in the sequence and as many times (!) as you specify them**. + +So you can easily create new PDFs with + +* the first or last 10 pages, +* only the odd or only the even pages (for doing double-sided printing), +* pages that **do** or **don't** contain a given text, +* reverse the page sequence, ... + +... whatever you can think of. + +The saved new document will contain links, annotations and bookmarks that are still valid (i.a.w. either pointing to a selected page or to some external resource). + +:meth:`Document.insertPage` and :meth:`Document.newPage` insert new pages. + +Pages themselves can moreover be modified by a range of methods (e.g. page rotation, annotation and link maintenance, text and image insertion). + +Joining and Splitting PDF Documents +------------------------------------ + +Method :meth:`Document.insertPDF` copies pages **between different** PDF documents. Here is a simple **joiner** example (*doc1* and *doc2* being openend PDFs):: + + # append complete doc2 to the end of doc1 + doc1.insertPDF(doc2) + +Here is a snippet that **splits** *doc1*. It creates a new document of its first and its last 10 pages:: + + doc2 = fitz.open() # new empty PDF + doc2.insertPDF(doc1, to_page = 9) # first 10 pages + doc2.insertPDF(doc1, from_page = len(doc1) - 10) # last 10 pages + doc2.save("first-and-last-10.pdf") + +More can be found in the :ref:`Document` chapter. Also have a look at `PDFjoiner.py `_. + +Embedding Data +--------------- + +PDFs can be used as containers for abitrary data (exeutables, other PDFs, text or binary files, etc.) much like ZIP archives. + +PyMuPDF fully supports this feature via :ref:`Document` *embeddedFile** methods and attributes. For some detail read :ref:`Appendix 3`, consult the Wiki on `embedding files `_, or the example scripts `embedded-copy.py `_, `embedded-export.py `_, `embedded-import.py `_, and `embedded-list.py `_. + + +Saving +------- + +As mentioned above, :meth:`Document.save` will **always** save the document in its current state. + +You can write changes back to the **original PDF** by specifying option *incremental=True*. This process is (usually) **extremely fast**, since changes are **appended to the original file** without completely rewriting it. + +:meth:`Document.save` options correspond to options of MuPDF's command line utility *mutool clean*, see the following table. + +=================== =========== ================================================== +**Save Option** **mutool** **Effect** +=================== =========== ================================================== +garbage=1 g garbage collect unused objects +garbage=2 gg in addition to 1, compact :data:`xref` tables +garbage=3 ggg in addition to 2, merge duplicate objects +garbage=4 gggg in addition to 3, skip duplicate streams +clean=1 cs clean and sanitize content streams +deflate=1 z deflate uncompressed streams +ascii=1 a convert binary data to ASCII format +linear=1 l create a linearized version +expand=1 i decompress images +expand=2 f decompress fonts +expand=255 d decompress all +=================== =========== ================================================== + +For example, *mutool clean -ggggz file.pdf* yields excellent compression results. It corresponds to *doc.save(filename, garbage=4, deflate=1)*. + +Closing +========= +It is often desirable to "close" a document to relinquish control of the underlying file to the OS, while your program continues. + +This can be achieved by the :meth:`Document.close` method. Apart from closing the underlying file, buffer areas associated with the document will be freed. + +Further Reading +================ +Also have a look at PyMuPDF's `Wiki `_ pages. Especially those named in the sidebar under title **"Recipes"** cover over 15 topics written in "How-To" style. + +This document also contains a :ref:`FAQ`. This chapter has close connection to the aforementioned recipes, and it will be extended with more content over time. + +.. rubric:: Footnotes + +.. [#f1] PyMuPDF lets you also open several image file types just like normal documents. See section :ref:`ImageFiles` in chapter :ref:`Pixmap` for more comments. + +.. [#f2] :meth:`Page.getText` is a convenience wrapper for several methods of another PyMuPDF class, :ref:`TextPage`. The names of these methods correspond to the argument string passed to :meth:`Page.getText` \: *Page.getText("dict")* is equivalent to *TextPage.extractDICT()* \. + +.. [#f3] "Sequences" are Python objects conforming to the sequence protocol. These objects implement a method named *__getitem__()*. Best known examples are Python tuples and lists. But *array.array*, *numpy.array* and PyMuPDF's "geometry" objects (:ref:`Algebra`) are sequences, too. Refer to :ref:`SequenceTypes` for details. diff --git a/docs/vars.rst b/docs/vars.rst new file mode 100644 index 0000000..8b1ed89 --- /dev/null +++ b/docs/vars.rst @@ -0,0 +1,449 @@ +=============================== +Constants and Enumerations +=============================== +Constants and enumerations of MuPDF as implemented by PyMuPDF. Each of the following variables is accessible as *fitz.variable*. + + +Constants +--------- + +.. py:data:: Base14_Fonts + + Predefined Python list of valid :ref:`Base-14-Fonts`. + + :rtype: list + +.. py:data:: csRGB + + Predefined RGB colorspace *fitz.Colorspace(fitz.CS_RGB)*. + + :rtype: :ref:`Colorspace` + +.. py:data:: csGRAY + + Predefined GRAY colorspace *fitz.Colorspace(fitz.CS_GRAY)*. + + :rtype: :ref:`Colorspace` + +.. py:data:: csCMYK + + Predefined CMYK colorspace *fitz.Colorspace(fitz.CS_CMYK)*. + + :rtype: :ref:`Colorspace` + +.. py:data:: CS_RGB + + 1 -- Type of :ref:`Colorspace` is RGBA + + :rtype: int + +.. py:data:: CS_GRAY + + 2 -- Type of :ref:`Colorspace` is GRAY + + :rtype: int + +.. py:data:: CS_CMYK + + 3 -- Type of :ref:`Colorspace` is CMYK + + :rtype: int + +.. py:data:: VersionBind + + 'x.xx.x' -- version of PyMuPDF (these bindings) + + :rtype: string + +.. py:data:: VersionFitz + + 'x.xxx' -- version of MuPDF + + :rtype: string + +.. py:data:: VersionDate + + ISO timestamp *YYYY-MM-DD HH:MM:SS* when these bindings were built. + + :rtype: string + +.. Note:: The docstring of *fitz* contains information of the above which can be retrieved like so: *print(fitz.__doc__)*, and should look like: *PyMuPDF 1.10.0: Python bindings for the MuPDF 1.10 library, built on 2016-11-30 13:09:13*. + +.. py:data:: version + + (VersionBind, VersionFitz, timestamp) -- combined version information where *timestamp* is the generation point in time formatted as "YYYYMMDDhhmmss". + + :rtype: tuple + + +.. _PermissionCodes: + +Document Permissions +---------------------------- + +====================== ======================================================================= +Code Permitted Action +====================== ======================================================================= +PDF_PERM_PRINT Print the document +PDF_PERM_MODIFY Modify the document's contents +PDF_PERM_COPY Copy or otherwise extract text and graphics +PDF_PERM_ANNOTATE Add or modify text annotations and interactive form fields +PDF_PERM_FORM Fill in forms and sign the document +PDF_PERM_ACCESSIBILITY Obsolete, always permitted +PDF_PERM_ASSEMBLE Insert, rotate, or delete pages, bookmarks, thumbnail images +PDF_PERM_PRINT_HQ High quality printing +====================== ======================================================================= + +.. _EncryptionMethods: + +PDF encryption method codes +---------------------------- + +=================== ==================================================== +Code Meaning +=================== ==================================================== +PDF_ENCRYPT_KEEP do not change +PDF_ENCRYPT_NONE remove any encryption +PDF_ENCRYPT_RC4_40 RC4 40 bit +PDF_ENCRYPT_RC4_128 RC4 128 bit +PDF_ENCRYPT_AES_128 *Advanced Encryption Standard* 128 bit +PDF_ENCRYPT_AES_256 *Advanced Encryption Standard* 256 bit +PDF_ENCRYPT_UNKNOWN unknown +=================== ==================================================== + +.. _FontExtensions: + +Font File Extensions +----------------------- +The table show file extensions you should use when extracting fonts from a PDF file. + +==== ============================================================================ +Ext Description +==== ============================================================================ +ttf TrueType font +pfa Postscript for ASCII font (various subtypes) +cff Type1C font (compressed font equivalent to Type1) +cid character identifier font (postscript format) +otf OpenType font +n/a built-in font (:ref:`Base-14-Fonts` or CJK: cannot be extracted) +==== ============================================================================ + +.. _TextAlign: + +Text Alignment +----------------------- +.. py:data:: TEXT_ALIGN_LEFT + + 0 -- align left. + +.. py:data:: TEXT_ALIGN_CENTER + + 1 -- align center. + +.. py:data:: TEXT_ALIGN_RIGHT + + 2 -- align right. + +.. py:data:: TEXT_ALIGN_JUSTIFY + + 3 -- align justify. + +.. _TextPreserve: + +Preserve Text Flags +-------------------- +Options controlling the amount of data a text device parses into a :ref:`TextPage`. + +.. py:data:: TEXT_PRESERVE_LIGATURES + + 1 -- If set, ligatures are passed through to the application in their original form. Otherwise ligatures are expanded into their constituent parts, e.g. the ligature ffi is expanded into three eparate characters f, f and i. + +.. py:data:: TEXT_PRESERVE_WHITESPACE + + 2 -- If set, whitespace is passed through to the application in its original form. Otherwise any type of horizontal whitespace (including horizontal tabs) will be replaced with space characters of variable width. + +.. py:data:: TEXT_PRESERVE_IMAGES + + 4 -- If set, then images will be stored in the structured text structure. + +.. py:data:: TEXT_INHIBIT_SPACES + + 8 -- If set, we will not try to add missing space characters where there are large gaps between characters. + + +.. _linkDest Kinds: + +Link Destination Kinds +----------------------- +Possible values of :attr:`linkDest.kind` (link destination kind). For details consult :ref:`AdobeManual`, chapter 8.2 on pp. 581. + +.. py:data:: LINK_NONE + + 0 -- No destination. Indicates a dummy link. + + :rtype: int + +.. py:data:: LINK_GOTO + + 1 -- Points to a place in this document. + + :rtype: int + +.. py:data:: LINK_URI + + 2 -- Points to a URI -- typically a resource specified with internet syntax. + + :rtype: int + +.. py:data:: LINK_LAUNCH + + 3 -- Launch (open) another file (of any "executable" type). + + :rtype: int + +.. py:data:: LINK_NAMED + + 4 -- points to a named location. + + :rtype: int + +.. py:data:: LINK_GOTOR + + 5 -- Points to a place in another PDF document. + + :rtype: int + +.. _linkDest Flags: + +Link Destination Flags +------------------------- + +.. Note:: The rightmost byte of this integer is a bit field, so test the truth of these bits with the *&* operator. + +.. py:data:: LINK_FLAG_L_VALID + + 1 (bit 0) Top left x value is valid + + :rtype: bool + +.. py:data:: LINK_FLAG_T_VALID + + 2 (bit 1) Top left y value is valid + + :rtype: bool + +.. py:data:: LINK_FLAG_R_VALID + + 4 (bit 2) Bottom right x value is valid + + :rtype: bool + +.. py:data:: LINK_FLAG_B_VALID + + 8 (bit 3) Bottom right y value is valid + + :rtype: bool + +.. py:data:: LINK_FLAG_FIT_H + + 16 (bit 4) Horizontal fit + + :rtype: bool + +.. py:data:: LINK_FLAG_FIT_V + + 32 (bit 5) Vertical fit + + :rtype: bool + +.. py:data:: LINK_FLAG_R_IS_ZOOM + + 64 (bit 6) Bottom right x is a zoom figure + + :rtype: bool + + +Annotation Related Constants +----------------------------- +See chapter 8.4.5, pp. 615 of the :ref:`AdobeManual` for details. + +.. _AnnotationTypes: + +Annotation Types +~~~~~~~~~~~~~~~~~ +These identifiers also cover **links** and **widgets**: the PDF specification technically handles them all in the same way, whereas **MuPDF** (and PyMuPDF) treats them as three basically different types of objects. + +:: + + PDF_ANNOT_TEXT 0 + PDF_ANNOT_LINK 1 # <=== Link object in PyMuPDF + PDF_ANNOT_FREE_TEXT 2 + PDF_ANNOT_LINE 3 + PDF_ANNOT_SQUARE 4 + PDF_ANNOT_CIRCLE 5 + PDF_ANNOT_POLYGON 6 + PDF_ANNOT_POLY_LINE 7 + PDF_ANNOT_HIGHLIGHT 8 + PDF_ANNOT_UNDERLINE 9 + PDF_ANNOT_SQUIGGLY 10 + PDF_ANNOT_STRIKE_OUT 11 + PDF_ANNOT_REDACT 12 + PDF_ANNOT_STAMP 13 + PDF_ANNOT_CARET 14 + PDF_ANNOT_INK 15 + PDF_ANNOT_POPUP 16 + PDF_ANNOT_FILE_ATTACHMENT 17 + PDF_ANNOT_SOUND 18 + PDF_ANNOT_MOVIE 19 + PDF_ANNOT_WIDGET 20 # <=== Widget object in PyMuPDF + PDF_ANNOT_SCREEN 21 + PDF_ANNOT_PRINTER_MARK 22 + PDF_ANNOT_TRAP_NET 23 + PDF_ANNOT_WATERMARK 24 + PDF_ANNOT_3D 25 + PDF_ANNOT_UNKNOWN -1 + +.. _AnnotationFlags: + +Annotation Flag Bits +~~~~~~~~~~~~~~~~~~~~~ +:: + + PDF_ANNOT_IS_INVISIBLE 1 << (1-1) + PDF_ANNOT_IS_HIDDEN 1 << (2-1) + PDF_ANNOT_IS_PRINT 1 << (3-1) + PDF_ANNOT_IS_NO_ZOOM 1 << (4-1) + PDF_ANNOT_IS_NO_ROTATE 1 << (5-1) + PDF_ANNOT_IS_NO_VIEW 1 << (6-1) + PDF_ANNOT_IS_READ_ONLY 1 << (7-1) + PDF_ANNOT_IS_LOCKED 1 << (8-1) + PDF_ANNOT_IS_TOGGLE_NO_VIEW 1 << (9-1) + PDF_ANNOT_IS_LOCKED_CONTENTS 1 << (10-1) + +.. _AnnotationLineEnds: + +Annotation Line Ending Styles +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +:: + + PDF_ANNOT_LE_NONE 0 + PDF_ANNOT_LE_SQUARE 1 + PDF_ANNOT_LE_CIRCLE 2 + PDF_ANNOT_LE_DIAMOND 3 + PDF_ANNOT_LE_OPEN_ARROW 4 + PDF_ANNOT_LE_CLOSED_ARROW 5 + PDF_ANNOT_LE_BUTT 6 + PDF_ANNOT_LE_R_OPEN_ARROW 7 + PDF_ANNOT_LE_R_CLOSED_ARROW 8 + PDF_ANNOT_LE_SLASH 9 + + +Widget Constants +----------------- + +.. _WidgetTypes: + +Widget Types (*field_type*) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +:: + + PDF_WIDGET_TYPE_UNKNOWN 0 + PDF_WIDGET_TYPE_BUTTON 1 + PDF_WIDGET_TYPE_CHECKBOX 2 + PDF_WIDGET_TYPE_COMBOBOX 3 + PDF_WIDGET_TYPE_LISTBOX 4 + PDF_WIDGET_TYPE_RADIOBUTTON 5 + PDF_WIDGET_TYPE_SIGNATURE 6 + PDF_WIDGET_TYPE_TEXT 7 + +Text Widget Subtypes (*text_format*) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +:: + + PDF_WIDGET_TX_FORMAT_NONE 0 + PDF_WIDGET_TX_FORMAT_NUMBER 1 + PDF_WIDGET_TX_FORMAT_SPECIAL 2 + PDF_WIDGET_TX_FORMAT_DATE 3 + PDF_WIDGET_TX_FORMAT_TIME 4 + + +Widget flags (*field_flags*) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**Common to all field types**:: + + PDF_FIELD_IS_READ_ONLY 1 + PDF_FIELD_IS_REQUIRED 1 << 1 + PDF_FIELD_IS_NO_EXPORT 1 << 2 + +**Text widgets**:: + + PDF_TX_FIELD_IS_MULTILINE 1 << 12 + PDF_TX_FIELD_IS_PASSWORD 1 << 13 + PDF_TX_FIELD_IS_FILE_SELECT 1 << 20 + PDF_TX_FIELD_IS_DO_NOT_SPELL_CHECK 1 << 22 + PDF_TX_FIELD_IS_DO_NOT_SCROLL 1 << 23 + PDF_TX_FIELD_IS_COMB 1 << 24 + PDF_TX_FIELD_IS_RICH_TEXT 1 << 25 + +**Button widgets**:: + + PDF_BTN_FIELD_IS_NO_TOGGLE_TO_OFF 1 << 14 + PDF_BTN_FIELD_IS_RADIO 1 << 15 + PDF_BTN_FIELD_IS_PUSHBUTTON 1 << 16 + PDF_BTN_FIELD_IS_RADIOS_IN_UNISON 1 << 25 + +**Choice widgets**:: + + PDF_CH_FIELD_IS_COMBO 1 << 17 + PDF_CH_FIELD_IS_EDIT 1 << 18 + PDF_CH_FIELD_IS_SORT 1 << 19 + PDF_CH_FIELD_IS_MULTI_SELECT 1 << 21 + PDF_CH_FIELD_IS_DO_NOT_SPELL_CHECK 1 << 22 + PDF_CH_FIELD_IS_COMMIT_ON_SEL_CHANGE 1 << 26 + + +.. _BlendModes: + +PDF Standard Blend Modes +---------------------------- + +For an explanation see :ref:`AdobeManual`, page 520:: + + PDF_BM_Color "Color" + PDF_BM_ColorBurn "ColorBurn" + PDF_BM_ColorDodge "ColorDodge" + PDF_BM_Darken "Darken" + PDF_BM_Difference "Difference" + PDF_BM_Exclusion "Exclusion" + PDF_BM_HardLight "HardLight" + PDF_BM_Hue "Hue" + PDF_BM_Lighten "Lighten" + PDF_BM_Luminosity "Luminosity" + PDF_BM_Multiply "Multiply" + PDF_BM_Normal "Normal" + PDF_BM_Overlay "Overlay" + PDF_BM_Saturation "Saturation" + PDF_BM_Screen "Screen" + PDF_BM_SoftLight "Softlight" + + +.. _StampIcons: + +Stamp Annotation Icons +---------------------------- +MuPDF has defined the following icons for **rubber stamp** annotations:: + + STAMP_Approved 0 + STAMP_AsIs 1 + STAMP_Confidential 2 + STAMP_Departmental 3 + STAMP_Experimental 4 + STAMP_Expired 5 + STAMP_Final 6 + STAMP_ForComment 7 + STAMP_ForPublicRelease 8 + STAMP_NotApproved 9 + STAMP_NotForPublicRelease 10 + STAMP_Sold 11 + STAMP_TopSecret 12 + STAMP_Draft 13 diff --git a/docs/version.rst b/docs/version.rst new file mode 100644 index 0000000..d528198 --- /dev/null +++ b/docs/version.rst @@ -0,0 +1,6 @@ +Covered Version +-------------------- + +This documentation covers PyMuPDF v1.17.4 features as of **2020-07-20 18:09:40**. + +.. note:: The major and minor versions of **PyMuPDF** and **MuPDF** will always be the same. Only the third qualifier (patch level) may deviate from that of MuPDF. \ No newline at end of file diff --git a/docs/wheelnames.txt b/docs/wheelnames.txt new file mode 100644 index 0000000..a3744da --- /dev/null +++ b/docs/wheelnames.txt @@ -0,0 +1,21 @@ +PyMuPDF-x.xx.xx-cp27-cp27m-macosx_10_9_x86_64.whl +PyMuPDF-x.xx.xx-cp27-cp27m-manylinux2010_x86_64.whl +PyMuPDF-x.xx.xx-cp27-cp27m-win32.whl +PyMuPDF-x.xx.xx-cp27-cp27m-win_amd64.whl +PyMuPDF-x.xx.xx-cp27-cp27mu-manylinux2010_x86_64.whl +PyMuPDF-x.xx.xx-cp35-cp35m-macosx_10_9_x86_64.whl +PyMuPDF-x.xx.xx-cp35-cp35m-manylinux2010_x86_64.whl +PyMuPDF-x.xx.xx-cp35-cp35m-win32.whl +PyMuPDF-x.xx.xx-cp35-cp35m-win_amd64.whl +PyMuPDF-x.xx.xx-cp36-cp36m-macosx_10_9_x86_64.whl +PyMuPDF-x.xx.xx-cp36-cp36m-manylinux2010_x86_64.whl +PyMuPDF-x.xx.xx-cp36-cp36m-win32.whl +PyMuPDF-x.xx.xx-cp36-cp36m-win_amd64.whl +PyMuPDF-x.xx.xx-cp37-cp37m-macosx_10_9_x86_64.whl +PyMuPDF-x.xx.xx-cp37-cp37m-manylinux2010_x86_64.whl +PyMuPDF-x.xx.xx-cp37-cp37m-win32.whl +PyMuPDF-x.xx.xx-cp37-cp37m-win_amd64.whl +PyMuPDF-x.xx.xx-cp38-cp38-macosx_10_9_x86_64.whl +PyMuPDF-x.xx.xx-cp38-cp38-manylinux2010_x86_64.whl +PyMuPDF-x.xx.xx-cp38-cp38-win32.whl +PyMuPDF-x.xx.xx-cp38-cp38-win_amd64.whl diff --git a/docs/widget.rst b/docs/widget.rst new file mode 100644 index 0000000..48dffe5 --- /dev/null +++ b/docs/widget.rst @@ -0,0 +1,168 @@ +.. _Widget: + +================ +Widget +================ + +This class represents a PDF Form field, also called "widget". Fields are a special case of annotations, which allow users with limited permissions to enter information in a PDF. This is primarily used for filling out forms. + +Like annotations, widgets live on PDF pages. Similar to annotations, the first widget on a page is accessible via :attr:`Page.firstWidget` and subsequent widgets can be accessed via the :attr:`Widget.next` property. + +*(Changed in version 1.16.0)* MuPDF no longer treats widgets as a subset of general annotations. Consequently, :attr:`Page.firstAnnot` and :meth:`Annot.next` will deliver non-widget annotations exclusively, and be *None* if only form fields exist on a page. Vice versa, :attr:`Page.firstWidget` and :meth:`Widget.next` will only show widgets. This design decision is purely internal to MuPDF; technically, links, annotations and fields have a lot in common and also continue to share the better part of their code within (Py-) MuPDF. + + +**Class API** + +.. class:: Widget + + .. method:: update + + After any changes to a widget, this method **must be used** to store them in the PDF [#f1]_. + + .. method:: reset + + Reset the field's value to its default -- if defined -- or remove it. Do not forget to issue :meth:`update` afterwards. + + .. attribute:: next + + Point to the next form field on the page. + + .. attribute:: border_color + + A list of up to 4 floats defining the field's border. Default value is *None* which causes border style and border width to be ignored. + + .. attribute:: border_style + + A string defining the line style of the field's border. See :attr:`Annot.border`. Default is "s" ("Solid") -- a continuous line. Only the first character (upper or lower case) will be regarded when creating a widget. + + .. attribute:: border_width + + A float defining the width of the border line. Default is 1. + + .. attribute:: border_dashes + + A list/tuple of integers defining the dash properties of the border line. This is only meaningful if *border_style == "D"* and :attr:`border_color` is provided. + + .. attribute:: choice_values + + Python sequence of strings defining the valid choices of list boxes and combo boxes. For these widgets, this property is mandatory and must contain at least two items. Ignored for other types. + + .. attribute:: field_name + + A mandatory string defining the field's name. No checking for duplicates takes place. + + .. attribute:: field_label + + An optional string containing an "alternate" field name. Typically used for any notes, help on field usage, etc. Default is the field name. + + .. attribute:: field_value + + The value of the field. + + .. attribute:: field_flags + + An integer defining a large amount of proprties of a field. Handle this attribute with care. + + .. attribute:: field_type + + A mandatory integer defining the field type. This is a value in the range of 0 to 6. It cannot be changed when updating the widget. + + .. attribute:: field_type_string + + A string describing (and derived from) the field type. + + .. attribute:: fill_color + + A list of up to 4 floats defining the field's background color. + + .. attribute:: button_caption + + The caption string of a button-type field. + + .. attribute:: is_signed + + A bool indicating the status of a signature field, else *None*. + + .. attribute:: rect + + The rectangle containing the field. + + .. attribute:: text_color + + A list of **1, 3 or 4 floats** defining the text color. Default value is black (`[0, 0, 0]`). + + .. attribute:: text_font + + A string defining the font to be used. Default and replacement for invalid values is *"Helv"*. For valid font reference names see the table below. + + .. attribute:: text_fontsize + + A float defining the text fontsize. Default value is zero, which causes PDF viewer software to dynamically choose a size suitable for the annotation's rectangle and text amount. + + .. attribute:: text_maxlen + + An integer defining the maximum number of text characters. PDF viewers will (should) not accept a longer text. + + .. attribute:: text_type + + An integer defining acceptable text types (e.g. numeric, date, time, etc.). For reference only for the time being -- will be ignored when creating or updating widgets. + + .. attribute:: xref + + The PDF :data:`xref` of the widget. + + .. attribute:: script + + *(New in version 1.16.12)* JavaScript text (unicode) for an action associated with the widget, or *None*. This is the only script action supported for **button type** widgets. + + .. attribute:: script_stroke + + *(New in version 1.16.12)* JavaScript text (unicode) to be performed when the user types a key-stroke into a text field or combo box or modifies the selection in a scrollable list box. This action can check the keystroke for validity and reject or modify it. *None* if not present. + + .. attribute:: script_format + + *(New in version 1.16.12)* JavaScript text (unicode) to be performed before the field is formatted to display its current value. This action can modify the field’s value before formatting. *None* if not present. + + .. attribute:: script_change + + *(New in version 1.16.12)* JavaScript text (unicode) to be performed when the field’s value is changed. This action can check the new value for validity. *None* if not present. + + .. attribute:: script_calc + + *(New in version 1.16.12)* JavaScript text (unicode) to be performed to recalculate the value of this field when that of another field changes. *None* if not present. + + .. note:: + 1. For **adding** or **changing** one of the above scripts, just put the appropriate JavaScript source code in the widget attribute. To **remove** a script, set the respective attribute to *None*. + 2. Button fields only support :attr:`script`. Other script entries will automatically be set to *None*. + + +Standard Fonts for Widgets +---------------------------------- +Widgets use their own resources object */DR*. A widget resources object must at least contain a */Font* object. Widget fonts are independent from page fonts. We currently support the 14 PDF base fonts using the following fixed reference names, or any name of an already existing field font. When specifying a text font for new or changed widgets, **either** choose one in the first table column (upper and lower case supported), **or** one of the already existing form fonts. In the latter case, spelling must exactly match. + +To find out already existing field fonts, inspect the list :attr:`Document.FormFonts`. + +============= ======================= +**Reference** **Base14 Fontname** +============= ======================= +CoBI Courier-BoldOblique +CoBo Courier-Bold +CoIt Courier-Oblique +Cour Courier +HeBI Helvetica-BoldOblique +HeBo Helvetica-Bold +HeIt Helvetica-Oblique +Helv Helvetica **(default)** +Symb Symbol +TiBI Times-BoldItalic +TiBo Times-Bold +TiIt Times-Italic +TiRo Times-Roman +ZaDb ZapfDingbats +============= ======================= + +You are generally free to use any font for every widget. However, we recommend using *ZaDb* ("ZapfDingbats") and fontsize 0 for check boxes: typical viewers will put a correctly sized tickmark in the field's rectangle, when it is clicked. + +.. rubric:: Footnotes + +.. [#f1] If you intend to re-access a new or updated field (e.g. for making a pixmap), make sure to reload the page first. Either close and re-open the document, or load another page first, or simply do ``page = doc.reload_page(page)``. diff --git a/fitz/__init__.py b/fitz/__init__.py new file mode 100644 index 0000000..e42df90 --- /dev/null +++ b/fitz/__init__.py @@ -0,0 +1,105 @@ +from __future__ import absolute_import, print_function +import sys +from fitz.fitz import * + +# define the supported colorspaces for convenience +fitz.csRGB = fitz.Colorspace(fitz.CS_RGB) +fitz.csGRAY = fitz.Colorspace(fitz.CS_GRAY) +fitz.csCMYK = fitz.Colorspace(fitz.CS_CMYK) +csRGB = fitz.csRGB +csGRAY = fitz.csGRAY +csCMYK = fitz.csCMYK + +# create the TOOLS object +TOOLS = fitz.Tools() +fitz.TOOLS = TOOLS + +if fitz.VersionFitz != fitz.TOOLS.mupdf_version(): + v1 = fitz.VersionFitz.split(".") + v2 = fitz.TOOLS.mupdf_version().split(".") + if v1[:-1] != v2[:-1]: + raise ValueError( + "MuPDF library mismatch %s <> %s" + % (fitz.VersionFitz, fitz.TOOLS.mupdf_version()) + ) + + +# copy functions to their respective fitz classes +import fitz.utils + +# ------------------------------------------------------------------------------ +# Document +# ------------------------------------------------------------------------------ +fitz.open = fitz.Document +fitz.Document.getToC = fitz.utils.getToC +fitz.Document._do_links = fitz.utils.do_links +fitz.Document.getPagePixmap = fitz.utils.getPagePixmap +fitz.Document.getPageText = fitz.utils.getPageText +fitz.Document.setMetadata = fitz.utils.setMetadata +fitz.Document.setToC = fitz.utils.setToC +fitz.Document.searchPageFor = fitz.utils.searchPageFor +fitz.Document.newPage = fitz.utils.newPage +fitz.Document.insertPage = fitz.utils.insertPage +fitz.Document.getCharWidths = fitz.utils.getCharWidths +fitz.Document.scrub = fitz.utils.scrub + +# ------------------------------------------------------------------------------ +# Page +# ------------------------------------------------------------------------------ +fitz.Page.apply_redactions = fitz.utils.apply_redactions +fitz.Page.drawBezier = fitz.utils.drawBezier +fitz.Page.drawCircle = fitz.utils.drawCircle +fitz.Page.drawCurve = fitz.utils.drawCurve +fitz.Page.drawLine = fitz.utils.drawLine +fitz.Page.drawOval = fitz.utils.drawOval +fitz.Page.drawPolyline = fitz.utils.drawPolyline +fitz.Page.drawQuad = fitz.utils.drawQuad +fitz.Page.drawRect = fitz.utils.drawRect +fitz.Page.drawSector = fitz.utils.drawSector +fitz.Page.drawSquiggle = fitz.utils.drawSquiggle +fitz.Page.drawZigzag = fitz.utils.drawZigzag +fitz.Page.getLinks = fitz.utils.getLinks +fitz.Page.getPixmap = fitz.utils.getPixmap +fitz.Page.getText = fitz.utils.getText +fitz.Page.getTextBlocks = fitz.utils.getTextBlocks +fitz.Page.getTextWords = fitz.utils.getTextWords +fitz.Page.insertImage = fitz.utils.insertImage +fitz.Page.insertLink = fitz.utils.insertLink +fitz.Page.insertText = fitz.utils.insertText +fitz.Page.insertTextbox = fitz.utils.insertTextbox +fitz.Page.newShape = lambda x: fitz.utils.Shape(x) +fitz.Page.searchFor = fitz.utils.searchFor +fitz.Page.showPDFpage = fitz.utils.showPDFpage +fitz.Page.updateLink = fitz.utils.updateLink +fitz.Page.writeText = fitz.utils.writeText +# ------------------------------------------------------------------------------ +# Rect +# ------------------------------------------------------------------------------ +fitz.Rect.getRectArea = fitz.utils.getRectArea +fitz.Rect.getArea = fitz.utils.getRectArea + +# ------------------------------------------------------------------------------ +# IRect +# ------------------------------------------------------------------------------ +fitz.IRect.getRectArea = fitz.utils.getRectArea +fitz.IRect.getArea = fitz.utils.getRectArea + +# ------------------------------------------------------------------------------ +# IRect +# ------------------------------------------------------------------------------ +fitz.TextWriter.fillTextbox = fitz.utils.fillTextbox + + +fitz.__doc__ = """ +PyMuPDF %s: Python bindings for the MuPDF %s library. +Version date: %s. +Built for Python %i.%i on %s (%i-bit). +""" % ( + fitz.VersionBind, + fitz.VersionFitz, + fitz.VersionDate, + sys.version_info[0], + sys.version_info[1], + sys.platform, + 64 if sys.maxsize > 2 ** 32 else 32, +) diff --git a/fitz/__main__.py b/fitz/__main__.py new file mode 100644 index 0000000..91111da --- /dev/null +++ b/fitz/__main__.py @@ -0,0 +1,782 @@ +from __future__ import division, print_function + +import os +import sys + +import fitz + +mycenter = lambda x: (" %s " % x).center(75, "-") + + +def recoverpix(doc, item): + """Return image for a given XREF. + """ + x = item[0] # xref of PDF image + s = item[1] # xref of its /SMask + if s == 0: # no smask: use direct image output + return doc.extractImage(x) + + def getimage(pix): + if pix.colorspace.n != 4: + return pix + tpix = fitz.Pixmap(fitz.csRGB, pix) + return tpix + + # we need to reconstruct the alpha channel with the smask + pix1 = fitz.Pixmap(doc, x) + pix2 = fitz.Pixmap(doc, s) # create pixmap of the /SMask entry + + """Sanity check: + - both pixmaps must have the same rectangle + - both pixmaps must have alpha=0 + - pix2 must consist of 1 byte per pixel + """ + if not (pix1.irect == pix2.irect and pix1.alpha == pix2.alpha == 0 and pix2.n == 1): + print("Warning: unsupported /SMask %i for %i:" % (s, x)) + print(pix2) + pix2 = None + return getimage(pix1) # return the pixmap as is + + pix = fitz.Pixmap(pix1) # copy of pix1, with an alpha channel added + pix.setAlpha(pix2.samples) # treat pix2.samples as the alpha values + pix1 = pix2 = None # free temp pixmaps + + # we may need to adjust something for CMYK pixmaps here: + return getimage(pix) + + +def open_file(filename, password, show=False, pdf=True): + """Open and authenticate a document. + """ + doc = fitz.open(filename) + if not doc.isPDF and pdf is True: + sys.exit("this command supports PDF files only") + rc = -1 + if not doc.needsPass: + return doc + if password: + rc = doc.authenticate(password) + if not rc: + sys.exit("authentication unsuccessful") + if show is True: + print("authenticated as %s" % "owner" if rc > 2 else "user") + else: + sys.exit("'%s' requires a password" % doc.name) + return doc + + +def print_dict(item): + """Print a Python dictionary. + """ + l = max([len(k) for k in item.keys()]) + 1 + for k, v in item.items(): + msg = "%s: %s" % (k.rjust(l), v) + print(msg) + return + + +def print_xref(doc, xref): + """Print an object given by XREF number. + + Simulate the PDF source in "pretty" format. + For a stream also print its size. + """ + print("%i 0 obj" % xref) + xref_str = doc.xrefObject(xref) + print(xref_str) + if doc.isStream(xref): + temp = xref_str.split() + try: + idx = temp.index("/Length") + 1 + size = temp[idx] + if size.endswith("0 R"): + size = "unknown" + except: + size = "unknown" + print("stream\n...%s bytes" % size) + print("endstream") + print("endobj") + + +def get_list(rlist, limit, what="page"): + """Transform a page / xref specification into a list of integers. + + Args + ---- + rlist: (str) the specification + limit: maximum number, i.e. number of pages, number of objects + what: a string to be used in error messages + Returns + ------- + A list of integers representing the specification. + """ + N = str(limit - 1) + rlist = rlist.replace("N", N).replace(" ", "") + rlist_arr = rlist.split(",") + out_list = [] + for seq, item in enumerate(rlist_arr): + n = seq + 1 + if item.isdecimal(): # a single integer + i = int(item) + if 1 <= i < limit: + out_list.append(int(item)) + else: + sys.exit("bad %s specification at item %i" % (what, n)) + continue + try: # this must be a range now, and all of the following must work: + i1, i2 = item.split("-") # will fail if not 2 items produced + i1 = int(i1) # will fail on non-integers + i2 = int(i2) + except: + sys.exit("bad %s range specification at item %i" % (what, n)) + + if not (1 <= i1 < limit and 1 <= i2 < limit): + sys.exit("bad %s range specification at item %i" % (what, n)) + + if i1 == i2: # just in case: a range of equal numbers + out_list.append(i1) + continue + + if i1 < i2: # first less than second + out_list += list(range(i1, i2 + 1)) + else: # first larger than second + out_list += list(range(i1, i2 - 1, -1)) + + return out_list + + +def show(args): + doc = open_file(args.input, args.password, True) + size = os.path.getsize(args.input) / 1024 + flag = "KB" + if size > 1000: + size /= 1024 + flag = "MB" + size = round(size, 1) + meta = doc.metadata + print( + "'%s', pages: %i, objects: %i, %g %s, %s, encryption: %s" + % ( + args.input, + doc.pageCount, + doc._getXrefLength() - 1, + size, + flag, + meta["format"], + meta["encryption"], + ) + ) + n = doc.isFormPDF + if n > 0: + s = doc.getSigFlags() + print( + "document contains %i root form fields and is %ssigned" + % (n, "not " if s != 3 else "") + ) + n = doc.embeddedFileCount() + if n > 0: + print("document contains %i embedded files" % n) + print() + if args.catalog: + print(mycenter("PDF catalog")) + xref = doc.PDFCatalog() + print_xref(doc, xref) + print() + if args.metadata: + print(mycenter("PDF metadata")) + print_dict(doc.metadata) + print() + if args.xrefs: + print(mycenter("object information")) + xrefl = get_list(args.xrefs, doc._getXrefLength(), what="xref") + for xref in xrefl: + print_xref(doc, xref) + print() + if args.pages: + print(mycenter("page information")) + pagel = get_list(args.pages, doc.pageCount + 1) + for pno in pagel: + n = pno - 1 + xref = doc._getPageXref(n)[0] + print("Page %i:" % pno) + print_xref(doc, xref) + print() + if args.trailer: + print(mycenter("PDF trailer")) + print(doc.PDFTrailer()) + print() + doc.close() + + +def clean(args): + doc = open_file(args.input, args.password, pdf=True) + encryption = args.encryption + encrypt = ("keep", "none", "rc4-40", "rc4-128", "aes-128", "aes-256").index( + encryption + ) + + if not args.pages: # simple cleaning + doc.save( + args.output, + garbage=args.garbage, + deflate=args.compress, + pretty=args.pretty, + clean=args.sanitize, + ascii=args.ascii, + linear=args.linear, + encryption=encrypt, + owner_pw=args.owner, + user_pw=args.user, + permissions=args.permission, + ) + return + + # create sub document from page numbers + pages = get_list(args.pages, doc.pageCount + 1) + outdoc = fitz.open() + for pno in pages: + n = pno - 1 + outdoc.insertPDF(doc, from_page=n, to_page=n) + outdoc.save( + args.output, + garbage=args.garbage, + deflate=args.compress, + pretty=args.pretty, + clean=args.sanitize, + ascii=args.ascii, + linear=args.linear, + encryption=encrypt, + owner_pw=args.owner, + user_pw=args.user, + permissions=args.permission, + ) + doc.close() + outdoc.close() + return + + +def doc_join(args): + """Join pages from several PDF documents. + """ + doc_list = args.input # a list of input PDFs + doc = fitz.open() # output PDF + for src_item in doc_list: # process one input PDF + src_list = src_item.split(",") + password = src_list[1] if len(src_list) > 1 else None + src = open_file(src_list[0], password, pdf=True) + pages = ",".join(src_list[2:]) # get 'pages' specifications + if pages: # if anything there, retrieve a list of desired pages + page_list = get_list(",".join(src_list[2:]), src.pageCount + 1) + else: # take all pages + page_list = range(1, src.pageCount + 1) + for i in page_list: + doc.insertPDF(src, from_page=i - 1, to_page=i - 1) # copy each source page + src.close() + + doc.save(args.output, garbage=4, deflate=True) + doc.close() + + +def embedded_copy(args): + """Copy embedded files between PDFs. + """ + doc = open_file(args.input, args.password, pdf=True) + if not doc.can_save_incrementally() and ( + not args.output or args.output == args.input + ): + sys.exit("cannot save PDF incrementally") + src = open_file(args.source, args.pwdsource) + names = set(args.name) if args.name else set() + src_names = set(src.embeddedFileNames()) + if names: + if not names <= src_names: + sys.exit("not all names are contained in source") + else: + names = src_names + if not names: + sys.exit("nothing to copy") + intersect = names & set( + doc.embeddedFileNames() + ) # any equal name already in target? + if intersect: + sys.exit("following names already exist in receiving PDF: %s" % str(intersect)) + + for item in names: + info = src.embeddedFileInfo(item) + buff = src.embeddedFileGet(item) + doc.embeddedFileAdd( + item, + buff, + filename=info["filename"], + ufilename=info["ufilename"], + desc=info["desc"], + ) + print("copied entry '%s' from '%s'" % (item, src.name)) + src.close() + if args.output and args.output != args.input: + doc.save(args.output, garbage=3) + else: + doc.saveIncr() + doc.close() + + +def embedded_del(args): + """Delete an embedded file entry. + """ + doc = open_file(args.input, args.password, pdf=True) + if not doc.can_save_incrementally() and ( + not args.output or args.output == args.input + ): + sys.exit("cannot save PDF incrementally") + + try: + doc.embeddedFileDel(args.name) + except ValueError: + sys.exit("no such embedded file '%s'" % args.name) + if not args.output or args.output == args.input: + doc.saveIncr() + else: + doc.save(args.output, garbage=1) + doc.close() + + +def embedded_get(args): + """Retrieve contents of an embedded file. + """ + doc = open_file(args.input, args.password, pdf=True) + try: + stream = doc.embeddedFileGet(args.name) + d = doc.embeddedFileInfo(args.name) + except ValueError: + sys.exit("no such embedded file '%s'" % args.name) + filename = args.output if args.output else d["filename"] + output = open(filename, "wb") + output.write(stream) + output.close() + print("saved entry '%s' as '%s'" % (args.name, filename)) + doc.close() + + +def embedded_add(args): + """Insert a new embedded file. + """ + doc = open_file(args.input, args.password, pdf=True) + if not doc.can_save_incrementally() and ( + args.output is None or args.output == args.input + ): + sys.exit("cannot save PDF incrementally") + + try: + doc.embeddedFileDel(args.name) + sys.exit("entry '%s' already exists" % args.name) + except: + pass + + if not os.path.exists(args.path) or not os.path.isfile(args.path): + sys.exit("no such file '%s'" % args.path) + stream = open(args.path, "rb").read() + filename = args.path + ufilename = filename + if not args.desc: + desc = filename + else: + desc = args.desc + doc.embeddedFileAdd( + args.name, stream, filename=filename, ufilename=ufilename, desc=desc + ) + if not args.output or args.output == args.input: + doc.saveIncr() + else: + doc.save(args.output, garbage=3) + doc.close() + + +def embedded_upd(args): + """Update contents or metadata of an embedded file. + """ + doc = open_file(args.input, args.password, pdf=True) + if not doc.can_save_incrementally() and ( + args.output is None or args.output == args.input + ): + sys.exit("cannot save PDF incrementally") + + try: + doc.embeddedFileInfo(args.name) + except: + sys.exit("no such embedded file '%s'" % args.name) + + if ( + args.path is not None + and os.path.exists(args.path) + and os.path.isfile(args.path) + ): + stream = open(args.path, "rb").read() + else: + stream = None + + if args.filename: + filename = args.filename + else: + filename = None + + if args.ufilename: + ufilename = args.ufilename + elif args.filename: + ufilename = args.filename + else: + ufilename = None + + if args.desc: + desc = args.desc + else: + desc = None + + doc.embeddedFileUpd( + args.name, stream, filename=filename, ufilename=ufilename, desc=desc + ) + if args.output is None or args.output == args.input: + doc.saveIncr() + else: + doc.save(args.output, garbage=3) + doc.close() + + +def embedded_list(args): + """List embedded files. + """ + doc = open_file(args.input, args.password, pdf=True) + names = doc.embeddedFileNames() + if args.name is not None: + if args.name not in names: + sys.exit("no such embedded file '%s'" % args.name) + else: + print() + print( + "printing 1 of %i embedded file%s:" + % (len(names), "s" if len(names) > 1 else "") + ) + print() + print_dict(doc.embeddedFileInfo(args.name)) + print() + return + if not names: + print("'%s' contains no embedded files" % doc.name) + return + if len(names) > 1: + msg = "'%s' contains the following %i embedded files" % (doc.name, len(names)) + else: + msg = "'%s' contains the following embedded file" % doc.name + print(msg) + print() + for name in names: + if not args.detail: + print(name) + continue + _ = doc.embeddedFileInfo(name) + print_dict(doc.embeddedFileInfo(name)) + print() + doc.close() + + +def extract_objects(args): + """Extract images and / or fonts from a PDF. + """ + if not args.fonts and not args.images: + sys.exit("neither fonts nor images requested") + doc = open_file(args.input, args.password, pdf=True) + + if args.pages: + pages = get_list(args.pages, doc.pageCount + 1) + else: + pages = range(1, doc.pageCount + 1) + + if not args.output: + out_dir = os.path.abspath(os.curdir) + else: + out_dir = args.output + if not (os.path.exists(out_dir) and os.path.isdir(out_dir)): + sys.exit("output directory %s does not exist" % out_dir) + + font_xrefs = set() # already saved fonts + image_xrefs = set() # already saved images + + for pno in pages: + if args.fonts: + itemlist = doc.getPageFontList(pno - 1) + for item in itemlist: + xref = item[0] + if xref not in font_xrefs: + font_xrefs.add(xref) + fontname, ext, _, buffer = doc.extractFont(xref) + if ext == "n/a" or not buffer: + continue + outname = os.path.join( + out_dir, fontname.replace(" ", "-") + "." + ext + ) + outfile = open(outname, "wb") + outfile.write(buffer) + outfile.close() + buffer = None + if args.images: + itemlist = doc.getPageImageList(pno - 1) + for item in itemlist: + xref = item[0] + if xref not in image_xrefs: + image_xrefs.add(xref) + pix = recoverpix(doc, item) + if type(pix) is dict: + ext = pix["ext"] + imgdata = pix["image"] + outname = os.path.join(out_dir, "img-%i.%s" % (xref, ext)) + outfile = open(outname, "wb") + outfile.write(imgdata) + outfile.close() + else: + outname = os.path.join(out_dir, "img-%i.png" % xref) + pix2 = ( + pix + if pix.colorspace.n < 4 + else fitz.Pixmap(fitz.csRGB, pix) + ) + pix2.writeImage(outname) + + if args.fonts: + print("saved %i fonts to '%s'" % (len(font_xrefs), out_dir)) + if args.images: + print("saved %i images to '%s'" % (len(image_xrefs), out_dir)) + doc.close() + + +def main(): + """Define command configurations. + """ + import argparse + + parser = argparse.ArgumentParser( + description=mycenter("Basic PyMuPDF Functions"), prog="fitz" + ) + subps = parser.add_subparsers( + title="Subcommands", help="Enter 'command -h' for subcommand specific help" + ) + + # ------------------------------------------------------------------------- + # 'show' command + # ------------------------------------------------------------------------- + ps_show = subps.add_parser("show", description=mycenter("display PDF information")) + ps_show.add_argument("input", type=str, help="PDF filename") + ps_show.add_argument("-password", help="password") + ps_show.add_argument("-catalog", action="store_true", help="show PDF catalog") + ps_show.add_argument("-trailer", action="store_true", help="show PDF trailer") + ps_show.add_argument("-metadata", action="store_true", help="show PDF metadata") + ps_show.add_argument( + "-xrefs", type=str, help="show selected objects, format: 1,5-7,N" + ) + ps_show.add_argument( + "-pages", type=str, help="show selected pages, format: 1,5-7,50-N" + ) + ps_show.set_defaults(func=show) + + # ------------------------------------------------------------------------- + # 'clean' command + # ------------------------------------------------------------------------- + ps_clean = subps.add_parser( + "clean", description=mycenter("optimize PDF or create sub-PDF if pages given") + ) + ps_clean.add_argument("input", type=str, help="PDF filename") + ps_clean.add_argument("output", type=str, help="output PDF filename") + ps_clean.add_argument("-password", help="password") + + ps_clean.add_argument( + "-encryption", + help="encryption method", + choices=("keep", "none", "rc4-40", "rc4-128", "aes-128", "aes-256"), + default="none", + ) + + ps_clean.add_argument("-owner", type=str, help="owner password") + ps_clean.add_argument("-user", type=str, help="user password") + + ps_clean.add_argument( + "-garbage", + type=int, + help="garbage collection level", + choices=range(5), + default=0, + ) + + ps_clean.add_argument( + "-compress", + action="store_true", + default=False, + help="compress (deflate) output", + ) + + ps_clean.add_argument( + "-ascii", action="store_true", default=False, help="ASCII encode binary data" + ) + + ps_clean.add_argument( + "-linear", + action="store_true", + default=False, + help="format for fast web display", + ) + + ps_clean.add_argument( + "-permission", type=int, default=-1, help="integer with permission levels" + ) + + ps_clean.add_argument( + "-sanitize", + action="store_true", + default=False, + help="sanitize / clean contents", + ) + ps_clean.add_argument( + "-pretty", action="store_true", default=False, help="prettify PDF structure" + ) + ps_clean.add_argument( + "-pages", help="output selected pages pages, format: 1,5-7,50-N" + ) + ps_clean.set_defaults(func=clean) + + # ------------------------------------------------------------------------- + # 'join' command + # ------------------------------------------------------------------------- + ps_join = subps.add_parser( + "join", + description=mycenter("join PDF documents"), + epilog="specify each input as 'filename[,password[,pages]]'", + ) + ps_join.add_argument("input", nargs="*", help="input filenames") + ps_join.add_argument("-output", required=True, help="output filename") + ps_join.set_defaults(func=doc_join) + + # ------------------------------------------------------------------------- + # 'extract' command + # ------------------------------------------------------------------------- + ps_extract = subps.add_parser( + "extract", description=mycenter("extract images and fonts to disk") + ) + ps_extract.add_argument("input", type=str, help="PDF filename") + ps_extract.add_argument("-images", action="store_true", help="extract images") + ps_extract.add_argument("-fonts", action="store_true", help="extract fonts") + ps_extract.add_argument( + "-output", help="folder to receive output, defaults to current" + ) + ps_extract.add_argument("-password", help="password") + ps_extract.add_argument( + "-pages", type=str, help="consider these pages only, format: 1,5-7,50-N" + ) + ps_extract.set_defaults(func=extract_objects) + + # ------------------------------------------------------------------------- + # 'embed-info' + # ------------------------------------------------------------------------- + ps_show = subps.add_parser( + "embed-info", description=mycenter("list embedded files") + ) + ps_show.add_argument("input", help="PDF filename") + ps_show.add_argument("-name", help="if given, report only this one") + ps_show.add_argument("-detail", action="store_true", help="detail information") + ps_show.add_argument("-password", help="password") + ps_show.set_defaults(func=embedded_list) + + # ------------------------------------------------------------------------- + # 'embed-add' command + # ------------------------------------------------------------------------- + ps_embed_add = subps.add_parser( + "embed-add", description=mycenter("add embedded file") + ) + ps_embed_add.add_argument("input", help="PDF filename") + ps_embed_add.add_argument("-password", help="password") + ps_embed_add.add_argument( + "-output", help="output PDF filename, incremental save if none" + ) + ps_embed_add.add_argument("-name", required=True, help="name of new entry") + ps_embed_add.add_argument("-path", required=True, help="path to data for new entry") + ps_embed_add.add_argument("-desc", help="description of new entry") + ps_embed_add.set_defaults(func=embedded_add) + + # ------------------------------------------------------------------------- + # 'embed-del' command + # ------------------------------------------------------------------------- + ps_embed_del = subps.add_parser( + "embed-del", description=mycenter("delete embedded file") + ) + ps_embed_del.add_argument("input", help="PDF filename") + ps_embed_del.add_argument("-password", help="password") + ps_embed_del.add_argument( + "-output", help="output PDF filename, incremental save if none" + ) + ps_embed_del.add_argument("-name", required=True, help="name of entry to delete") + ps_embed_del.set_defaults(func=embedded_del) + + # ------------------------------------------------------------------------- + # 'embed-upd' command + # ------------------------------------------------------------------------- + ps_embed_upd = subps.add_parser( + "embed-upd", + description=mycenter("update embedded file"), + epilog="except '-name' all parameters are optional", + ) + ps_embed_upd.add_argument("input", help="PDF filename") + ps_embed_upd.add_argument("-name", required=True, help="name of entry") + ps_embed_upd.add_argument("-password", help="password") + ps_embed_upd.add_argument( + "-output", help="Output PDF filename, incremental save if none" + ) + ps_embed_upd.add_argument("-path", help="path to new data for entry") + ps_embed_upd.add_argument("-filename", help="new filename to store in entry") + ps_embed_upd.add_argument( + "-ufilename", help="new unicode filename to store in entry" + ) + ps_embed_upd.add_argument("-desc", help="new description to store in entry") + ps_embed_upd.set_defaults(func=embedded_upd) + + # ------------------------------------------------------------------------- + # 'embed-extract' command + # ------------------------------------------------------------------------- + ps_embed_extract = subps.add_parser( + "embed-extract", description=mycenter("extract embedded file to disk") + ) + ps_embed_extract.add_argument("input", type=str, help="PDF filename") + ps_embed_extract.add_argument("-name", required=True, help="name of entry") + ps_embed_extract.add_argument("-password", help="password") + ps_embed_extract.add_argument( + "-output", help="output filename, default is stored name" + ) + ps_embed_extract.set_defaults(func=embedded_get) + + # ------------------------------------------------------------------------- + # 'embed-copy' command + # ------------------------------------------------------------------------- + ps_embed_copy = subps.add_parser( + "embed-copy", description=mycenter("copy embedded files between PDFs") + ) + ps_embed_copy.add_argument("input", type=str, help="PDF to receive embedded files") + ps_embed_copy.add_argument("-password", help="password of input") + ps_embed_copy.add_argument( + "-output", help="output PDF, incremental save to 'input' if omitted" + ) + ps_embed_copy.add_argument( + "-source", required=True, help="copy embedded files from here" + ) + ps_embed_copy.add_argument("-pwdsource", help="password of 'source' PDF") + ps_embed_copy.add_argument( + "-name", nargs="*", help="restrict copy to these entries" + ) + ps_embed_copy.set_defaults(func=embedded_copy) + + # ------------------------------------------------------------------------- + # start program + # ------------------------------------------------------------------------- + args = parser.parse_args() # create parameter arguments class + if not hasattr(args, "func"): # no function selected + parser.print_help() # so print top level help + else: + args.func(args) # execute requested command + + +if __name__ == "__main__": + main() diff --git a/fitz/fitz.i b/fitz/fitz.i new file mode 100644 index 0000000..6c6c66d --- /dev/null +++ b/fitz/fitz.i @@ -0,0 +1,9443 @@ +%module fitz +%pythonbegin %{ +from __future__ import division, print_function +%} +//----------------------------------------------------------------------------- +// SWIG macro: generate fitz exceptions +//----------------------------------------------------------------------------- +%define FITZEXCEPTION(meth, cond) +%exception meth +{ + $action + if (cond) {PyErr_SetString(PyExc_RuntimeError, fz_caught_message(gctx)); + return NULL;} +} +%enddef + +//----------------------------------------------------------------------------- +// SWIG macro: check that a document is not closed / encrypted +//----------------------------------------------------------------------------- +%define CLOSECHECK(meth, doc) +%pythonprepend meth %{doc +if self.isClosed or self.isEncrypted: + raise ValueError("document closed or encrypted")%} +%enddef + +%define CLOSECHECK0(meth, doc) +%pythonprepend meth%{doc +if self.isClosed: + raise ValueError("document closed")%} +%enddef + +//----------------------------------------------------------------------------- +// SWIG macro: check if object has a valid parent +//----------------------------------------------------------------------------- +%define PARENTCHECK(meth, doc) +%pythonprepend meth %{doc +CheckParent(self)%} +%enddef + + +%{ +#define MEMDEBUG 0 +#if MEMDEBUG == 1 + #define DEBUGMSG1(x) PySys_WriteStderr("[DEBUG] free %s ", x) + #define DEBUGMSG2 PySys_WriteStderr("... done!\n") +#else + #define DEBUGMSG1(x) + #define DEBUGMSG2 +#endif + +#ifndef FLT_EPSILON + #define FLT_EPSILON 1e-5 +#endif + +#define return_none Py_RETURN_NONE +#define SWIG_FILE_WITH_INIT +#define SWIG_PYTHON_2_UNICODE + +// memory allocation macros +#define JM_MEMORY 1 +#if PY_VERSION_HEX < 0x03000000 + #undef JM_MEMORY + #define JM_MEMORY 0 +#endif + +#if JM_MEMORY == 1 + #define JM_Alloc(type, len) PyMem_New(type, len) + #define JM_Free(x) PyMem_Del(x) +#else + #define JM_Alloc(type, len) (type *) malloc(sizeof(type)*len) + #define JM_Free(x) free(x) +#endif + +#define EXISTS(x) (x != NULL && PyObject_IsTrue(x)==1) +#define THROWMSG(msg) fz_throw(gctx, FZ_ERROR_GENERIC, msg) +#define ASSERT_PDF(cond) if (cond == NULL) fz_throw(gctx, FZ_ERROR_GENERIC, "not a PDF") +#define INRANGE(v, low, high) ((low) <= v && v <= (high)) +#define MAX(a, b) ((a) < (b)) ? (b) : (a) +#define MIN(a, b) ((a) < (b)) ? (a) : (b) + +#define JM_PyErr_Clear if (PyErr_Occurred()) PyErr_Clear() + +// binary output depends on Python major +# if PY_VERSION_HEX >= 0x03000000 + #define JM_BinFromChar(x) PyBytes_FromString(x) + #define JM_BinFromCharSize(x, y) PyBytes_FromStringAndSize(x, (Py_ssize_t) y) +# else + #define JM_BinFromChar(x) PyByteArray_FromStringAndSize(x, (Py_ssize_t) strlen(x)) + #define JM_BinFromCharSize(x, y) PyByteArray_FromStringAndSize(x, (Py_ssize_t) y) +# endif + +#include +#include +#include +char *JM_Python_str_AsChar(PyObject *str); + +// additional headers from MuPDF ---------------------------------------------- +pdf_obj *pdf_lookup_page_loc(fz_context *ctx, pdf_document *doc, int needle, pdf_obj **parentp, int *indexp); +fz_pixmap *fz_scale_pixmap(fz_context *ctx, fz_pixmap *src, float x, float y, float w, float h, const fz_irect *clip); +int fz_pixmap_size(fz_context *ctx, fz_pixmap *src); +void fz_subsample_pixmap(fz_context *ctx, fz_pixmap *tile, int factor); +void fz_copy_pixmap_rect(fz_context *ctx, fz_pixmap *dest, fz_pixmap *src, fz_irect b, const fz_default_colorspaces *default_cs); +// end of additional MuPDF headers -------------------------------------------- + +PyObject *JM_mupdf_warnings_store; +PyObject *JM_mupdf_show_errors; +%} + +//----------------------------------------------------------------------------- +// global context +//----------------------------------------------------------------------------- +%init %{ +#if JM_MEMORY == 1 + gctx = fz_new_context(&JM_Alloc_Context, NULL, FZ_STORE_DEFAULT); +#else + gctx = fz_new_context(NULL, NULL, FZ_STORE_DEFAULT); +#endif + if(!gctx) + { + PyErr_SetString(PyExc_RuntimeError, "Fatal error: could not create global context."); +# if PY_VERSION_HEX >= 0x03000000 + return NULL; +# else + return; +# endif + } + fz_register_document_handlers(gctx); + +//----------------------------------------------------------------------------- +// START redirect stdout/stderr +//----------------------------------------------------------------------------- +JM_mupdf_warnings_store = PyList_New(0); +JM_mupdf_show_errors = Py_True; +char user[] = "PyMuPDF"; +fz_set_warning_callback(gctx, JM_mupdf_warning, &user); +fz_set_error_callback(gctx, JM_mupdf_error, &user); +//----------------------------------------------------------------------------- +// STOP redirect stdout/stderr +//----------------------------------------------------------------------------- +// init global constants +//----------------------------------------------------------------------------- +dictkey_align = PyString_InternFromString("align"); +dictkey_bbox = PyString_InternFromString("bbox"); +dictkey_blocks = PyString_InternFromString("blocks"); +dictkey_bpc = PyString_InternFromString("bpc"); +dictkey_c = PyString_InternFromString("c"); +dictkey_chars = PyString_InternFromString("chars"); +dictkey_color = PyString_InternFromString("color"); +dictkey_colorspace = PyString_InternFromString("colorspace"); +dictkey_content = PyString_InternFromString("content"); +dictkey_creationDate = PyString_InternFromString("creationDate"); +dictkey_cs_name = PyString_InternFromString("cs-name"); +dictkey_da = PyString_InternFromString("da"); +dictkey_dashes = PyString_InternFromString("dashes"); +dictkey_desc = PyString_InternFromString("desc"); +dictkey_dir = PyString_InternFromString("dir"); +dictkey_effect = PyString_InternFromString("effect"); +dictkey_ext = PyString_InternFromString("ext"); +dictkey_filename = PyString_InternFromString("filename"); +dictkey_fill = PyString_InternFromString("fill"); +dictkey_flags = PyString_InternFromString("flags"); +dictkey_font = PyString_InternFromString("font"); +dictkey_height = PyString_InternFromString("height"); +dictkey_id = PyString_InternFromString("id"); +dictkey_image = PyString_InternFromString("image"); +dictkey_length = PyString_InternFromString("length"); +dictkey_lines = PyString_InternFromString("lines"); +dictkey_modDate = PyString_InternFromString("modDate"); +dictkey_name = PyString_InternFromString("name"); +dictkey_origin = PyString_InternFromString("origin"); +dictkey_size = PyString_InternFromString("size"); +dictkey_smask = PyString_InternFromString("smask"); +dictkey_spans = PyString_InternFromString("spans"); +dictkey_stroke = PyString_InternFromString("stroke"); +dictkey_style = PyString_InternFromString("style"); +dictkey_subject = PyString_InternFromString("subject"); +dictkey_text = PyString_InternFromString("text"); +dictkey_title = PyString_InternFromString("title"); +dictkey_type = PyString_InternFromString("type"); +dictkey_ufilename = PyString_InternFromString("ufilename"); +dictkey_width = PyString_InternFromString("width"); +dictkey_wmode = PyString_InternFromString("wmode"); +dictkey_xref = PyString_InternFromString("xref"); +dictkey_xres = PyString_InternFromString("xres"); +dictkey_yres = PyString_InternFromString("yres"); +%} + +%header %{ +fz_context *gctx; +static int JM_UNIQUE_ID = 0; + +struct DeviceWrapper { + fz_device *device; + fz_display_list *list; +}; +%} + +//----------------------------------------------------------------------------- +// include version information and several other helpers +//----------------------------------------------------------------------------- +%pythoncode %{ +import io +import math +import os +import weakref +from binascii import hexlify + +fitz_py2 = str is bytes # if true, this is Python 2 +string_types = (str, unicode) if fitz_py2 else (str,) +%} +%include version.i +%include helper-defines.i +%include helper-geo-c.i +%include helper-other.i +%include helper-pixmap.i +%include helper-geo-py.i +%include helper-annot.i +%include helper-stext.i +%include helper-fields.i +%include helper-python.i +%include helper-portfolio.i +%include helper-select.i +%include helper-xobject.i +%include helper-pdfinfo.i +%include helper-convert.i + +//----------------------------------------------------------------------------- +// fz_document +//----------------------------------------------------------------------------- +struct Document +{ + %extend + { + ~Document() + { + DEBUGMSG1("Document w/o close"); + fz_document *this_doc = (fz_document *) $self; + fz_drop_document(gctx, this_doc); + DEBUGMSG2; + } + FITZEXCEPTION(Document, !result) + + %pythonprepend Document %{ + """Creates a document. Use 'open' as a synonym. + + Notes: + Basic usages: + open() - creates new empty PDF document + open(filename) - string or pathlib.Path, must have supported + file extension. + open(type, buffer) - type: valid extension, buffer: bytes object. + open(stream=buffer, filetype=type) - keyword version of previous. + open(filename, fileype=type) - filename with unrecognized extension. + + rect, width, height, fontsize may be used to re-layout reflowable documents + on open (e.g. EPUB). Ignored if not applicable. + """ + + if not filename or type(filename) is str: + pass + else: + if fitz_py2: # Python 2 + if type(filename) is unicode: + filename = filename.encode("utf8") + else: + filename = str(filename) # takes care of pathlib.Path + + if stream: + if not (filename or filetype): + raise ValueError("need filetype for opening a stream") + + if type(stream) is bytes: + self.stream = stream + elif type(stream) is bytearray: + self.stream = bytes(stream) + elif type(stream) is io.BytesIO: + self.stream = stream.getvalue() + else: + raise ValueError("bad type: 'stream'") + stream = self.stream + else: + self.stream = None + + if filename and not stream: + self.name = filename + else: + self.name = "" + + self.isClosed = False + self.isEncrypted = False + self.metadata = None + self.FontInfos = [] + self.Graftmaps = {} + self.ShownPages = {} + self._page_refs = weakref.WeakValueDictionary()%} + + %pythonappend Document %{ + if self.thisown: + self._graft_id = TOOLS.gen_id() + if self.needsPass is True: + self.isEncrypted = True + else: # we won't init until doc is decrypted + self.initData() + %} + + Document(const char *filename=NULL, PyObject *stream=NULL, + const char *filetype=NULL, PyObject *rect=NULL, + float width=0, float height=0, + float fontsize=11) + { + gctx->error.errcode = 0; // reset any error code + gctx->error.message[0] = 0; // reset any error message + fz_document *doc = NULL; + char *c = NULL; + size_t len = 0; + fz_stream *data = NULL; + float w = width, h = height; + fz_rect r = JM_rect_from_py(rect); + if (!fz_is_infinite_rect(r)) { + w = r.x1 - r.x0; + h = r.y1 - r.y0; + } + + fz_try(gctx) { + if (stream != Py_None) { // stream given, **MUST** be bytes! + + c = PyBytes_AS_STRING(stream); // just a pointer, no new obj + len = (size_t) PyBytes_Size(stream); + data = fz_open_memory(gctx, (const unsigned char *) c, len); + char *magic = (char *)filename; + if (!magic) magic = (char *)filetype; + doc = fz_open_document_with_stream(gctx, magic, data); + } else { + if (filename) { + if (!filetype || strlen(filetype) == 0) { + doc = fz_open_document(gctx, filename); + } else { + const fz_document_handler *handler; + handler = fz_recognize_document(gctx, filetype); + if (handler && handler->open) + doc = handler->open(gctx, filename); + else THROWMSG("unrecognized file type"); + } + } else { + pdf_document *pdf = pdf_create_document(gctx); + pdf->dirty = 1; + doc = (fz_document *) pdf; + } + } + } + fz_catch(gctx) { + return NULL; + } + if (w > 0 && h > 0) { + fz_layout_document(gctx, doc, w, h, fontsize); + } + return (struct Document *) doc; + } + + %pythonprepend close %{ + """Close document.""" + if self.isClosed: + raise ValueError("document closed") + if hasattr(self, "_outline") and self._outline: + self._dropOutline(self._outline) + self._outline = None + self._reset_page_refs() + self.metadata = None + self.stream = None + self.isClosed = True + self.FontInfos = [] + for gmap in self.Graftmaps: + self.Graftmaps[gmap] = None + self.Graftmaps = {} + self.ShownPages = {} + %} + + %pythonappend close %{self.thisown = False%} + void close() + { + DEBUGMSG1("Document after close"); + fz_document *doc = (fz_document *) $self; + while(doc->refs > 1) { + fz_drop_document(gctx, doc); + } + fz_drop_document(gctx, doc); + DEBUGMSG2; + } + + FITZEXCEPTION(loadPage, !result) + %pythonprepend loadPage %{ + """Load a page. + + 'page_id' is either a 0-based page number or a tuple (chapter, pno), + with chapter number and page number within that chapter. + """ + + if self.isClosed or self.isEncrypted: + raise ValueError("document closed or encrypted") + if page_id is None: + page_id = 0 + if page_id not in self: + raise ValueError("page not in document") + if type(page_id) is int and page_id < 0: + np = self.pageCount + while page_id < 0: + page_id += np + %} + %pythonappend loadPage %{ + val.thisown = True + val.parent = weakref.proxy(self) + self._page_refs[id(val)] = val + val._annot_refs = weakref.WeakValueDictionary() + val.number = page_id + %} + struct Page * + loadPage(PyObject *page_id) + { + fz_page *page = NULL; + fz_document *doc = (fz_document *) $self; + int pno; + PyObject *val = NULL; + fz_try(gctx) { + if (PySequence_Check(page_id)) { + val = PySequence_GetItem(page_id, 0); + if (!val) THROWMSG("bad page page id"); + int chapter = (int) PyLong_AsLong(val); + Py_DECREF(val); + if (PyErr_Occurred()) THROWMSG("bad page id"); + + val = PySequence_GetItem(page_id, 1); + if (!val) THROWMSG("bad page page id"); + pno = (int) PyLong_AsLong(val); + Py_DECREF(val); + if (PyErr_Occurred()) THROWMSG("bad page id"); + + page = fz_load_chapter_page(gctx, doc, chapter, pno); + } else { + pno = (int) PyLong_AsLong(page_id); + if (PyErr_Occurred()) THROWMSG("bad page id"); + page = fz_load_page(gctx, doc, pno); + } + } + fz_catch(gctx) { + PyErr_Clear(); + return NULL; + } + PyErr_Clear(); + return (struct Page *) page; + } + + + FITZEXCEPTION(_remove_links_to, !result) + PyObject *_remove_links_to(int first, int last) + { + fz_try(gctx) { + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_specifics(gctx, doc); + pdf_drop_page_tree(gctx, pdf); + pdf_load_page_tree(gctx, pdf); + remove_dest_range(gctx, pdf, first, last); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + + CLOSECHECK0(_loadOutline, """Load first outline.""") + struct Outline *_loadOutline() + { + fz_outline *ol = NULL; + fz_document *doc = (fz_document *) $self; + fz_try(gctx) { + ol = fz_load_outline(gctx, doc); + } + fz_catch(gctx) { + return NULL; + } + return (struct Outline *) ol; + } + + void _dropOutline(struct Outline *ol) { + DEBUGMSG1("Outline"); + fz_outline *this_ol = (fz_outline *) ol; + fz_drop_outline(gctx, this_ol); + DEBUGMSG2; + } + + //--------------------------------------------------------------------- + // EmbeddedFiles utility functions + //--------------------------------------------------------------------- + FITZEXCEPTION(_embeddedFileNames, !result) + CLOSECHECK0(_embeddedFileNames, """Get list of embedded file names.""") + PyObject *_embeddedFileNames(PyObject *namelist) + { + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_specifics(gctx, doc); + fz_try(gctx) { + ASSERT_PDF(pdf); + PyObject *val; + pdf_obj *names = pdf_dict_getl(gctx, pdf_trailer(gctx, pdf), + PDF_NAME(Root), + PDF_NAME(Names), + PDF_NAME(EmbeddedFiles), + PDF_NAME(Names), + NULL); + if (pdf_is_array(gctx, names)) { + int i, n = pdf_array_len(gctx, names); + for (i=0; i < n; i+=2) { + val = JM_EscapeStrFromStr(pdf_to_text_string(gctx, + pdf_array_get(gctx, names, i))); + LIST_APPEND_DROP(namelist, val); + } + } + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + FITZEXCEPTION(_embeddedFileDel, !result) + PyObject *_embeddedFileDel(int idx) + { + fz_try(gctx) { + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_document_from_fz_document(gctx, doc); + pdf_obj *names = pdf_dict_getl(gctx, pdf_trailer(gctx, pdf), + PDF_NAME(Root), + PDF_NAME(Names), + PDF_NAME(EmbeddedFiles), + PDF_NAME(Names), + NULL); + pdf_array_delete(gctx, names, idx + 1); + pdf_array_delete(gctx, names, idx); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + FITZEXCEPTION(_embeddedFileInfo, !result) + PyObject *_embeddedFileInfo(int idx, PyObject *infodict) + { + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_document_from_fz_document(gctx, doc); + char *name; + fz_try(gctx) { + pdf_obj *names = pdf_dict_getl(gctx, pdf_trailer(gctx, pdf), + PDF_NAME(Root), + PDF_NAME(Names), + PDF_NAME(EmbeddedFiles), + PDF_NAME(Names), + NULL); + + pdf_obj *o = pdf_array_get(gctx, names, 2*idx+1); + + name = (char *) pdf_to_text_string(gctx, + pdf_dict_get(gctx, o, PDF_NAME(F))); + DICT_SETITEM_DROP(infodict, dictkey_filename, JM_EscapeStrFromStr(name)); + + name = (char *) pdf_to_text_string(gctx, + pdf_dict_get(gctx, o, PDF_NAME(UF))); + DICT_SETITEM_DROP(infodict, dictkey_ufilename, JM_EscapeStrFromStr(name)); + + name = (char *) pdf_to_text_string(gctx, + pdf_dict_get(gctx, o, PDF_NAME(Desc))); + DICT_SETITEM_DROP(infodict, dictkey_desc, JM_UnicodeFromStr(name)); + + int len = -1, DL = -1; + pdf_obj *ef = pdf_dict_get(gctx, o, PDF_NAME(EF)); + o = pdf_dict_getl(gctx, ef, PDF_NAME(F), + PDF_NAME(Length), NULL); + if (o) len = pdf_to_int(gctx, o); + + o = pdf_dict_getl(gctx, ef, PDF_NAME(F), PDF_NAME(DL), NULL); + if (o) { + DL = pdf_to_int(gctx, o); + } else { + o = pdf_dict_getl(gctx, ef, PDF_NAME(F), PDF_NAME(Params), + PDF_NAME(Size), NULL); + if (o) DL = pdf_to_int(gctx, o); + } + DICT_SETITEM_DROP(infodict, dictkey_size, Py_BuildValue("i", DL)); + DICT_SETITEM_DROP(infodict, dictkey_length, Py_BuildValue("i", len)); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + FITZEXCEPTION(_embeddedFileUpd, !result) + PyObject *_embeddedFileUpd(int idx, PyObject *buffer = NULL, char *filename = NULL, char *ufilename = NULL, char *desc = NULL) + { + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_document_from_fz_document(gctx, doc); + fz_buffer *res = NULL; + fz_var(res); + fz_try(gctx) { + pdf_obj *names = pdf_dict_getl(gctx, pdf_trailer(gctx, pdf), + PDF_NAME(Root), + PDF_NAME(Names), + PDF_NAME(EmbeddedFiles), + PDF_NAME(Names), + NULL); + + pdf_obj *entry = pdf_array_get(gctx, names, 2*idx+1); + + pdf_obj *filespec = pdf_dict_getl(gctx, entry, PDF_NAME(EF), + PDF_NAME(F), NULL); + if (!filespec) THROWMSG("bad PDF: /EF object not found"); + + res = JM_BufferFromBytes(gctx, buffer); + if (EXISTS(buffer) && !res) THROWMSG("bad type: 'buffer'"); + if (res) + { + JM_update_stream(gctx, pdf, filespec, res, 1); + // adjust /DL and /Size parameters + int64_t len = (int64_t) fz_buffer_storage(gctx, res, NULL); + pdf_obj *l = pdf_new_int(gctx, len); + pdf_dict_put(gctx, filespec, PDF_NAME(DL), l); + pdf_dict_putl(gctx, filespec, l, PDF_NAME(Params), PDF_NAME(Size), NULL); + } + + if (filename) + pdf_dict_put_text_string(gctx, entry, PDF_NAME(F), filename); + + if (ufilename) + pdf_dict_put_text_string(gctx, entry, PDF_NAME(UF), ufilename); + + if (desc) + pdf_dict_put_text_string(gctx, entry, PDF_NAME(Desc), desc); + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + } + fz_catch(gctx) + return NULL; + pdf->dirty = 1; + return_none; + } + + FITZEXCEPTION(_embeddedFileGet, !result) + PyObject *_embeddedFileGet(int idx) + { + fz_document *doc = (fz_document *) $self; + PyObject *cont = NULL; + pdf_document *pdf = pdf_document_from_fz_document(gctx, doc); + fz_buffer *buf = NULL; + fz_var(buf); + fz_try(gctx) { + pdf_obj *names = pdf_dict_getl(gctx, pdf_trailer(gctx, pdf), + PDF_NAME(Root), + PDF_NAME(Names), + PDF_NAME(EmbeddedFiles), + PDF_NAME(Names), + NULL); + + pdf_obj *entry = pdf_array_get(gctx, names, 2*idx+1); + pdf_obj *filespec = pdf_dict_getl(gctx, entry, PDF_NAME(EF), + PDF_NAME(F), NULL); + buf = pdf_load_stream(gctx, filespec); + cont = JM_BinFromBuffer(gctx, buf); + } + fz_always(gctx) { + fz_drop_buffer(gctx, buf); + } + fz_catch(gctx) { + return NULL; + } + return cont; + } + + FITZEXCEPTION(_embeddedFileAdd, !result) + PyObject *_embeddedFileAdd(const char *name, PyObject *buffer, char *filename=NULL, char *ufilename=NULL, char *desc=NULL) + { + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_document_from_fz_document(gctx, doc); + fz_buffer *data = NULL; + unsigned char *buffdata; + fz_var(data); + int entry = 0; + size_t size = 0; + pdf_obj *names = NULL; + fz_try(gctx) { + ASSERT_PDF(pdf); + data = JM_BufferFromBytes(gctx, buffer); + if (!data) THROWMSG("bad type: 'buffer'"); + size = fz_buffer_storage(gctx, data, &buffdata); + + names = pdf_dict_getl(gctx, pdf_trailer(gctx, pdf), + PDF_NAME(Root), + PDF_NAME(Names), + PDF_NAME(EmbeddedFiles), + PDF_NAME(Names), + NULL); + if (!pdf_is_array(gctx, names)) { + pdf_obj *root = pdf_dict_get(gctx, pdf_trailer(gctx, pdf), + PDF_NAME(Root)); + names = pdf_new_array(gctx, pdf, 6); // an even number! + pdf_dict_putl_drop(gctx, root, names, + PDF_NAME(Names), + PDF_NAME(EmbeddedFiles), + PDF_NAME(Names), + NULL); + } + + pdf_obj *fileentry = JM_embed_file(gctx, pdf, data, + filename, + ufilename, + desc, 1); + pdf_array_push(gctx, names, pdf_new_text_string(gctx, name)); + pdf_array_push_drop(gctx, names, fileentry); + } + fz_always(gctx) { + fz_drop_buffer(gctx, data); + } + fz_catch(gctx) { + return NULL; + } + pdf->dirty = 1; + return_none; + } + + %pythoncode %{ + def embeddedFileNames(self): + """Get list of names of EmbeddedFiles.""" + filenames = [] + self._embeddedFileNames(filenames) + return filenames + + def _embeddedFileIndex(self, item): + filenames = self.embeddedFileNames() + msg = "'%s' not in EmbeddedFiles array." % str(item) + if item in filenames: + idx = filenames.index(item) + elif item in range(len(filenames)): + idx = item + else: + raise ValueError(msg) + return idx + + def embeddedFileCount(self): + """Get number of EmbeddedFiles.""" + return len(self.embeddedFileNames()) + + def embeddedFileDel(self, item): + """Delete an entry from EmbeddedFiles. + + Notes: + The argument must be name or index of an EmbeddedFiles item. + Physical deletion of data will happen on save to a new + file with appropriate garbage option. + Args: + item: (str/int) name or number of the entry. + Returns: + None + """ + idx = self._embeddedFileIndex(item) + return self._embeddedFileDel(idx) + + def embeddedFileInfo(self, item): + """Get information of an item in the EmbeddedFiles array. + + Args: + item: number or name of item. + Returns: + Information dictionary. + """ + idx = self._embeddedFileIndex(item) + infodict = {"name": self.embeddedFileNames()[idx]} + self._embeddedFileInfo(idx, infodict) + return infodict + + def embeddedFileGet(self, item): + """Get the content of an item in the EmbeddedFiles array. + + Args: + item: number or name of item. + Returns: + (bytes) The file content. + """ + idx = self._embeddedFileIndex(item) + return self._embeddedFileGet(idx) + + def embeddedFileUpd(self, item, buffer=None, + filename=None, + ufilename=None, + desc=None): + """Change an item of the EmbeddedFiles array. + + Notes: + All parameter are optional. If all arguments are omitted, the + method is a no-op. + Args: + item: the number or the name of the item. + buffer: (binary data) the new file content. + filename: (str) the new file name. + ufilename: (unicode) the new filen ame. + desc: (str) the new description. + """ + idx = self._embeddedFileIndex(item) + return self._embeddedFileUpd(idx, buffer=buffer, + filename=filename, + ufilename=ufilename, + desc=desc) + + def embeddedFileAdd(self, name, buffer, + filename=None, + ufilename=None, + desc=None): + """Add an item to the EmbeddedFiles array. + + Args: + name: the name of the new item. + buffer: (binary data) the file content. + filename: (str) the file name. + ufilename: (unicode) the filen ame. + desc: (str) the description. + """ + filenames = self.embeddedFileNames() + msg = "Name '%s' already in EmbeddedFiles array." % str(name) + if name in filenames: + raise ValueError(msg) + + if filename is None: + filename = name + if ufilename is None: + ufilename = unicode(filename, "utf8") if str is bytes else filename + if desc is None: + desc = name + return self._embeddedFileAdd(name, buffer=buffer, + filename=filename, + ufilename=ufilename, + desc=desc) + %} + + FITZEXCEPTION(convertToPDF, !result) + CLOSECHECK(convertToPDF, """Convert document to a PDF, selecting page range and optional rotation. Output bytes object.""") + PyObject *convertToPDF(int from_page=0, int to_page=-1, int rotate=0) + { + PyObject *doc = NULL; + fz_document *fz_doc = (fz_document *) $self; + fz_try(gctx) { + int fp = from_page, tp = to_page, srcCount = fz_count_pages(gctx, fz_doc); + if (pdf_specifics(gctx, fz_doc)) + THROWMSG("use select+write or insertPDF for PDF docs instead"); + if (fp < 0) fp = 0; + if (fp > srcCount - 1) fp = srcCount - 1; + if (tp < 0) tp = srcCount - 1; + if (tp > srcCount - 1) tp = srcCount - 1; + doc = JM_convert_to_pdf(gctx, fz_doc, fp, tp, rotate); + } + fz_catch(gctx) { + return NULL; + } + return doc; + } + + CLOSECHECK0(pageCount, """Number of pages.""") + %pythoncode%{@property%} + PyObject *pageCount() + { + return Py_BuildValue("i", fz_count_pages(gctx, (fz_document *) $self)); + } + + CLOSECHECK0(chapterCount, """Number of chapters.""") + %pythoncode%{@property%} + PyObject *chapterCount() + { + return Py_BuildValue("i", fz_count_chapters(gctx, (fz_document *) $self)); + } + + FITZEXCEPTION(lastLocation, !result) + CLOSECHECK0(lastLocation, """Id (chapter, page) of last page.""") + %pythoncode%{@property%} + PyObject *lastLocation() + { + fz_document *this_doc = (fz_document *) $self; + fz_location last_loc; + fz_try(gctx) { + last_loc = fz_last_page(gctx, this_doc); + } + fz_catch(gctx) { + return NULL; + } + return Py_BuildValue("ii", last_loc.chapter, last_loc.page); + } + + + FITZEXCEPTION(chapterPageCount, !result) + CLOSECHECK0(chapterPageCount, """Page count of chapter.""") + PyObject *chapterPageCount(int chapter) + { + int chapters = fz_count_chapters(gctx, (fz_document *) $self); + int pages = 0; + fz_try(gctx) { + if (chapter < 0 || chapter >= chapters) + THROWMSG("bad chapter number"); + pages = fz_count_chapter_pages(gctx, (fz_document *) $self, chapter); + } + fz_catch(gctx) { + return NULL; + } + return Py_BuildValue("i", pages); + } + + FITZEXCEPTION(previousLocation, !result) + %pythonprepend previousLocation %{ + """Get (chapter, page) of previous page.""" + if self.isClosed or self.isEncrypted: + raise ValueError("document closed or encrypted") + if type(page_id) is int: + page_id = (0, page_id) + if page_id not in self: + raise ValueError("page id not in document") + if page_id == (0, 0): + return () + %} + PyObject *previousLocation(PyObject *page_id) + { + fz_document *this_doc = (fz_document *) $self; + fz_location prev_loc, loc; + PyObject *val; + int pno; + fz_try(gctx) { + val = PySequence_GetItem(page_id, 0); + if (!val) THROWMSG("bad page id"); + int chapter = (int) PyLong_AsLong(val); + Py_DECREF(val); + if (PyErr_Occurred()) THROWMSG("bad page id"); + + val = PySequence_GetItem(page_id, 1); + if (!val) THROWMSG("bad page id"); + pno = (int) PyLong_AsLong(val); + Py_DECREF(val); + if (PyErr_Occurred()) THROWMSG("bad page id"); + + loc = fz_make_location(chapter, pno); + prev_loc = fz_previous_page(gctx, this_doc, loc); + } + fz_catch(gctx) { + PyErr_Clear(); + return NULL; + } + return Py_BuildValue("ii", prev_loc.chapter, prev_loc.page); + } + + + FITZEXCEPTION(nextLocation, !result) + %pythonprepend nextLocation %{ + """Get (chapter, page) of next page.""" + if self.isClosed or self.isEncrypted: + raise ValueError("document closed or encrypted") + if type(page_id) is int: + page_id = (0, page_id) + if page_id not in self: + raise ValueError("page id not in document") + if tuple(page_id) == self.lastLocation: + return () + %} + PyObject *nextLocation(PyObject *page_id) + { + fz_document *this_doc = (fz_document *) $self; + fz_location next_loc, loc; + int page_n = -1; + PyObject *val; + int pno; + fz_try(gctx) { + val = PySequence_GetItem(page_id, 0); + if (!val) THROWMSG("bad page id"); + int chapter = (int) PyLong_AsLong(val); + Py_DECREF(val); + if (PyErr_Occurred()) THROWMSG("bad page id"); + + val = PySequence_GetItem(page_id, 1); + if (!val) THROWMSG("bad page id"); + pno = (int) PyLong_AsLong(val); + Py_DECREF(val); + if (PyErr_Occurred()) THROWMSG("bad page id"); + + loc = fz_make_location(chapter, pno); + next_loc = fz_next_page(gctx, this_doc, loc); + } + fz_catch(gctx) { + PyErr_Clear(); + return NULL; + } + return Py_BuildValue("ii", next_loc.chapter, next_loc.page); + } + + + FITZEXCEPTION(location_from_page_number, !result) + CLOSECHECK0(location_from_page_number, """Convert pno to (chapter, page).""") + PyObject *location_from_page_number(int pno) + { + fz_document *this_doc = (fz_document *) $self; + fz_location loc = fz_make_location(-1, -1); + int pageCount = fz_count_pages(gctx, this_doc); + while (pno < 0) pno += pageCount; + fz_try(gctx) { + if (pno >= pageCount) + THROWMSG("bad page number(s)"); + loc = fz_location_from_page_number(gctx, this_doc, pno); + } + fz_catch(gctx) { + return NULL; + } + return Py_BuildValue("ii", loc.chapter, loc.page); + } + + FITZEXCEPTION(page_number_from_location, !result) + %pythonprepend page_number_from_location%{ + """Convert (chapter, pno) to page number.""" + if type(page_id) is int: + np = self.pageCount + while page_id < 0: + page_id += np + page_id = (0, page_id) + if page_id not in self: + raise ValueError("page id not in document") + %} + PyObject *page_number_from_location(PyObject *page_id) + { + fz_document *this_doc = (fz_document *) $self; + fz_location loc; + int page_n = -1; + PyObject *val; + int pno; + fz_try(gctx) { + val = PySequence_GetItem(page_id, 0); + if (!val) THROWMSG("bad page id"); + int chapter = (int) PyLong_AsLong(val); + Py_DECREF(val); + if (PyErr_Occurred()) THROWMSG("bad page id"); + + val = PySequence_GetItem(page_id, 1); + if (!val) THROWMSG("bad page id"); + pno = (int) PyLong_AsLong(val); + Py_DECREF(val); + if (PyErr_Occurred()) THROWMSG("bad page id"); + + loc = fz_make_location(chapter, pno); + page_n = fz_page_number_from_location(gctx, this_doc, loc); + } + fz_catch(gctx) { + PyErr_Clear(); + return NULL; + } + return Py_BuildValue("i", page_n); + } + + CLOSECHECK0(_getMetadata, """Get metadata.""") + char *_getMetadata(const char *key) + { + fz_document *doc = (fz_document *) $self; + int vsize; + char *value; + vsize = fz_lookup_metadata(gctx, doc, key, NULL, 0)+1; + if(vsize > 1) { + value = JM_Alloc(char, vsize); + fz_lookup_metadata(gctx, doc, key, value, vsize); + return value; + } + else + return NULL; + } + + CLOSECHECK0(needsPass, """Indicate password required.""") + %pythoncode%{@property%} + PyObject *needsPass() { + return JM_BOOL(fz_needs_password(gctx, (fz_document *) $self)); + } + + %pythoncode%{@property%} + CLOSECHECK0(language, """Document language.""") + PyObject *language() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + if (!pdf) return_none; + fz_text_language lang = pdf_document_language(gctx, pdf); + char buf[8]; + if (lang == FZ_LANG_UNSET) return_none; + return Py_BuildValue("s", fz_string_from_text_language(buf, lang)); + } + + FITZEXCEPTION(setLanguage, !result) + PyObject *setLanguage(char *language=NULL) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + fz_try(gctx) { + ASSERT_PDF(pdf); + fz_text_language lang; + if (!language) + lang = FZ_LANG_UNSET; + else + lang = fz_text_language_from_string(language); + pdf_set_document_language(gctx, pdf, lang); + } + fz_catch(gctx) { + return NULL; + } + Py_RETURN_TRUE; + } + + + %pythonprepend resolveLink %{ + """Calculate internal link destination. + + Args: + uri: (str) some Link.uri + chapters: (bool) whether to use (chapter, page) format + Returns: + (page_id, x, y) where x, y are point coordinates on the page. + page_id is either page number (if chapters=0), or (chapter, pno). + """ + %} + PyObject *resolveLink(char *uri=NULL, int chapters=0) + { + if (!uri) { + if (chapters) return Py_BuildValue("(ii)ff", -1, -1, 0, 0); + return Py_BuildValue("iff", -1, 0, 0); + } + fz_document *this_doc = (fz_document *) $self; + float xp = 0, yp = 0; + fz_location loc = {0, 0}; + fz_try(gctx) { + loc = fz_resolve_link(gctx, (fz_document *) $self, uri, &xp, &yp); + } + fz_catch(gctx) { + if (chapters) return Py_BuildValue("(ii)ff", -1, -1, 0, 0); + return Py_BuildValue("iff", -1, 0, 0); + } + if (chapters) + return Py_BuildValue("(ii)ff", loc.chapter, loc.page, xp, yp); + int pno = fz_page_number_from_location(gctx, this_doc, loc); + return Py_BuildValue("iff", pno, xp, yp); + } + + FITZEXCEPTION(layout, !result) + CLOSECHECK(layout, """Re-layout a reflowable document.""") + %pythonappend layout %{ + self._reset_page_refs() + self.initData()%} + PyObject *layout(PyObject *rect = NULL, float width = 0, float height = 0, float fontsize = 11) + { + fz_document *doc = (fz_document *) $self; + if (!fz_is_document_reflowable(gctx, doc)) return_none; + fz_try(gctx) { + float w = width, h = height; + fz_rect r = JM_rect_from_py(rect); + if (!fz_is_infinite_rect(r)) { + w = r.x1 - r.x0; + h = r.y1 - r.y0; + } + if (w <= 0.0f || h <= 0.0f) + THROWMSG("invalid page size"); + fz_layout_document(gctx, doc, w, h, fontsize); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + FITZEXCEPTION(makeBookmark, !result) + CLOSECHECK(makeBookmark, """Make a page pointer before layouting document.""") + PyObject *makeBookmark(PyObject *loc) + { + fz_document *doc = (fz_document *) $self; + fz_location location; + fz_bookmark mark; + fz_try(gctx) { + if (JM_INT_ITEM(loc, 0, &location.chapter) == 1) + THROWMSG("Bad location"); + if (JM_INT_ITEM(loc, 1, &location.page) == 1) + THROWMSG("Bad location"); + mark = fz_make_bookmark(gctx, doc, location); + if (!mark) THROWMSG("Bad location"); + } + fz_catch(gctx) { + return NULL; + } + return PyLong_FromVoidPtr((void *) mark); + } + + + FITZEXCEPTION(findBookmark, !result) + CLOSECHECK(findBookmark, """Find new location after layouting a document.""") + PyObject *findBookmark(PyObject *bm) + { + fz_document *doc = (fz_document *) $self; + fz_location location; + fz_try(gctx) { + intptr_t mark = (intptr_t) PyLong_AsVoidPtr(bm); + location = fz_lookup_bookmark(gctx, doc, mark); + } + fz_catch(gctx) { + return NULL; + } + return Py_BuildValue("ii", location.chapter, location.page); + } + + + CLOSECHECK0(isReflowable, """Check if document is layoutable.""") + %pythoncode%{@property%} + PyObject *isReflowable() + { + return JM_BOOL(fz_is_document_reflowable(gctx, (fz_document *) $self)); + } + + FITZEXCEPTION(_deleteObject, !result) + CLOSECHECK0(_deleteObject, """Delete object.""") + PyObject *_deleteObject(int xref) + { + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_specifics(gctx, doc); + fz_try(gctx) { + ASSERT_PDF(pdf); + if (!INRANGE(xref, 1, pdf_xref_len(gctx, pdf)-1)) + THROWMSG("xref out of range"); + pdf_delete_object(gctx, pdf, xref); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + CLOSECHECK0(_getPDFroot, """Get xref of PDF catalog.""") + PyObject *_getPDFroot() + { + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_specifics(gctx, doc); + int xref = 0; + if (!pdf) return Py_BuildValue("i", xref); + fz_try(gctx) { + pdf_obj *root = pdf_dict_get(gctx, pdf_trailer(gctx, pdf), + PDF_NAME(Root)); + xref = pdf_to_num(gctx, root); + } + fz_catch(gctx) {;} + return Py_BuildValue("i", xref); + } + + CLOSECHECK0(_getPDFfileid, """Get PDF file id.""") + PyObject *_getPDFfileid() + { + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_specifics(gctx, doc); + if (!pdf) return_none; + PyObject *idlist = PyList_New(0); + fz_buffer *buffer = NULL; + unsigned char *hex; + pdf_obj *o; + int n, i, len; + PyObject *bytes; + + fz_try(gctx) { + pdf_obj *identity = pdf_dict_get(gctx, pdf_trailer(gctx, pdf), + PDF_NAME(ID)); + if (identity) + { + n = pdf_array_len(gctx, identity); + for (i = 0; i < n; i++) + { + o = pdf_array_get(gctx, identity, i); + len = (int) pdf_to_str_len(gctx, o); + buffer = fz_new_buffer(gctx, 2 * len); + fz_buffer_storage(gctx, buffer, &hex); + hexlify(len, (unsigned char *) pdf_to_text_string(gctx, o), hex); + LIST_APPEND_DROP(idlist, JM_UnicodeFromStr(hex)); + Py_CLEAR(bytes); + fz_drop_buffer(gctx, buffer); + buffer = NULL; + } + } + } + fz_catch(gctx) fz_drop_buffer(gctx, buffer); + return idlist; + } + + CLOSECHECK0(isPDF, """Check if a PDF document.""") + %pythoncode%{@property%} + PyObject *isPDF() + { + if (pdf_specifics(gctx, (fz_document *) $self)) Py_RETURN_TRUE; + else Py_RETURN_FALSE; + } + + CLOSECHECK0(_hasXrefStream, """Check if xref table is a stream.""") + %pythoncode%{@property%} + PyObject *_hasXrefStream() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + if (!pdf) Py_RETURN_FALSE; + if (pdf->has_xref_streams) Py_RETURN_TRUE; + Py_RETURN_FALSE; + } + + CLOSECHECK0(_hasXrefOldStyle, """Check if xref table is old style.""") + %pythoncode%{@property%} + PyObject *_hasXrefOldStyle() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + if (!pdf) Py_RETURN_FALSE; + if (pdf->has_old_style_xrefs) Py_RETURN_TRUE; + Py_RETURN_FALSE; + } + + CLOSECHECK0(isDirty, """True if PDF has unsaved changes.""") + %pythoncode%{@property%} + PyObject *isDirty() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + if (!pdf) Py_RETURN_FALSE; + return JM_BOOL(pdf_has_unsaved_changes(gctx, pdf)); + } + + CLOSECHECK0(can_save_incrementally, """Check whether incremental saves are possible.""") + PyObject *can_save_incrementally() + { + pdf_document *pdf = pdf_document_from_fz_document(gctx, (fz_document *) $self); + if (!pdf) Py_RETURN_FALSE; // gracefully handle non-PDF + return JM_BOOL(pdf_can_be_saved_incrementally(gctx, pdf)); + } + + CLOSECHECK0(authenticate, """Decrypt document.""") + %pythonappend authenticate %{ + if val: # the doc is decrypted successfully and we init the outline + self.isEncrypted = False + self.initData() + self.thisown = True + %} + PyObject *authenticate(char *password) + { + return Py_BuildValue("i", fz_authenticate_password(gctx, (fz_document *) $self, (const char *) password)); + } + + //--------------------------------------------------------------------- + // save PDF file + //--------------------------------------------------------------------- + FITZEXCEPTION(save, !result) + %pythonprepend save %{ + """Save PDF to filename.""" + if self.isClosed or self.isEncrypted: + raise ValueError("document closed or encrypted") + if type(filename) == str: + pass + elif str is bytes and type(filename) == unicode: + filename = filename.encode('utf8') + else: + filename = str(filename) + if filename == self.name and not incremental: + raise ValueError("save to original must be incremental") + if self.pageCount < 1: + raise ValueError("cannot save with zero pages") + if incremental: + if self.name != filename or self.stream: + raise ValueError("incremental needs original file") + %} + + PyObject *save(char *filename, int garbage=0, int clean=0, int deflate=0, int incremental=0, int ascii=0, int expand=0, int linear=0, int pretty=0, int encryption=1, int permissions=-1, char *owner_pw=NULL, char *user_pw=NULL) + { + pdf_write_options opts = pdf_default_write_options; + opts.do_incremental = incremental; + opts.do_ascii = ascii; + opts.do_compress = deflate; + opts.do_compress_images = deflate; + opts.do_compress_fonts = deflate; + opts.do_decompress = expand; + opts.do_garbage = garbage; + opts.do_pretty = pretty; + opts.do_linear = linear; + opts.do_clean = clean; + opts.do_sanitize = clean; + opts.do_encrypt = encryption; + opts.permissions = permissions; + if (owner_pw) + { + memcpy(&opts.opwd_utf8, owner_pw, strlen(owner_pw)+1); + } + + if (user_pw) + { + memcpy(&opts.upwd_utf8, user_pw, strlen(user_pw)+1); + } + + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + fz_try(gctx) { + ASSERT_PDF(pdf); + JM_embedded_clean(gctx, pdf); + pdf_save_document(gctx, pdf, filename, &opts); + pdf->dirty = 0; + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + //--------------------------------------------------------------------- + // write document to memory + //--------------------------------------------------------------------- + FITZEXCEPTION(write, !result) + %pythonprepend write %{ + """Write the PDF to a bytes object.""" + if self.isClosed or self.isEncrypted: + raise ValueError("document closed or encrypted") + if self.pageCount < 1: + raise ValueError("cannot write with zero pages")%} + + PyObject *write(int garbage=0, int clean=0, int deflate=0, + int ascii=0, int expand=0, int linear=0, int pretty=0, + int encryption=1, + int permissions=-1, + char *owner_pw=NULL, + char *user_pw=NULL) + { + PyObject *r = NULL; + fz_output *out = NULL; + fz_buffer *res = NULL; + pdf_write_options opts = pdf_default_write_options; + opts.do_incremental = 0; + opts.do_ascii = ascii; + opts.do_compress = deflate; + opts.do_compress_images = deflate; + opts.do_compress_fonts = deflate; + opts.do_decompress = expand; + opts.do_garbage = garbage; + opts.do_linear = linear; + opts.do_clean = clean; + opts.do_sanitize = clean; + opts.do_pretty = pretty; + opts.do_encrypt = encryption; + opts.permissions = permissions; + if (owner_pw) { + memcpy(&opts.opwd_utf8, owner_pw, strlen(owner_pw)+1); + } + + if (user_pw) { + memcpy(&opts.upwd_utf8, user_pw, strlen(user_pw)+1); + } + + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_specifics(gctx, doc); + fz_var(out); + fz_var(r); + fz_try(gctx) { + ASSERT_PDF(pdf); + if (pdf_count_pages(gctx, pdf) < 1) + THROWMSG("cannot save with zero pages"); + JM_embedded_clean(gctx, pdf); + res = fz_new_buffer(gctx, 8192); + out = fz_new_output_with_buffer(gctx, res); + pdf_write_document(gctx, pdf, out, &opts); + r = JM_BinFromBuffer(gctx, res); + pdf->dirty = 0; + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + fz_drop_output(gctx, out); + } + fz_catch(gctx) { + return NULL; + } + return r; + } + + //--------------------------------------------------------------------- + // Insert pages from a source PDF into this PDF. + // For reconstructing the links (_do_links method), we must save the + // insertion point (start_at) if it was specified as -1. + //--------------------------------------------------------------------- + FITZEXCEPTION(insertPDF, !result) + %pythonprepend insertPDF %{ + """Insert a page range from another PDF. + + Args: + docsrc: PDF to copy from. Must be different object, but may be same file. + from_page: (int) first page of source PDF to copy. + to_page: (int) last page of source PDF to copy. + start_at: (int) from_page will become this page number in target. + links: (int/bool) whether to also copy links + annots: (int/bool) whether to also copy annotations + + Copy sequence will reversed if from_page > to_page.""" + + if self.isClosed or self.isEncrypted: + raise ValueError("document closed or encrypted") + if id(self) == id(docsrc): + raise ValueError("source and target PDF are the same object") + sa = start_at + if sa < 0: + sa = self.pageCount%} + + %pythonappend insertPDF %{ + self._reset_page_refs() + if links: + self._do_links(docsrc, from_page = from_page, to_page = to_page, + start_at = sa)%} + + PyObject * + insertPDF(struct Document *docsrc, + int from_page=-1, + int to_page=-1, + int start_at=-1, + int rotate=-1, + int links=1, + int annots=1) + { + fz_document *doc = (fz_document *) $self; + pdf_document *pdfout = pdf_specifics(gctx, doc); + pdf_document *pdfsrc = pdf_specifics(gctx, (fz_document *) docsrc); + int outCount = fz_count_pages(gctx, doc); + int srcCount = fz_count_pages(gctx, (fz_document *) docsrc); + + // local copies of page numbers + int fp = from_page, tp = to_page, sa = start_at; + + // normalize page numbers + fp = MAX(fp, 0); // -1 = first page + fp = MIN(fp, srcCount - 1); // but do not exceed last page + + if (tp < 0) tp = srcCount - 1; // -1 = last page + tp = MIN(tp, srcCount - 1); // but do not exceed last page + + if (sa < 0) sa = outCount; // -1 = behind last page + sa = MIN(sa, outCount); // but that is also the limit + + fz_try(gctx) { + if (!pdfout || !pdfsrc) THROWMSG("source or target not a PDF"); + JM_merge_range(gctx, pdfout, pdfsrc, fp, tp, sa, rotate, links, annots); + } + fz_catch(gctx) { + return NULL; + } + pdfout->dirty = 1; + return_none; + } + + //--------------------------------------------------------------------- + // Create and insert a new page (PDF) + //--------------------------------------------------------------------- + FITZEXCEPTION(_newPage, !result) + CLOSECHECK(_newPage, """Make a new PDF page.""") + %pythonappend _newPage %{self._reset_page_refs()%} + PyObject *_newPage(int pno=-1, float width=595, float height=842) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + fz_rect mediabox = fz_unit_rect; + mediabox.x1 = width; + mediabox.y1 = height; + pdf_obj *resources = NULL, *page_obj = NULL; + fz_buffer *contents = NULL; + fz_try(gctx) { + ASSERT_PDF(pdf); + if (pno < -1) THROWMSG("bad page number(s)"); + // create /Resources and /Contents objects + resources = pdf_add_object_drop(gctx, pdf, pdf_new_dict(gctx, pdf, 1)); + page_obj = pdf_add_page(gctx, pdf, mediabox, 0, resources, contents); + pdf_insert_page(gctx, pdf, pno, page_obj); + } + fz_always(gctx) { + fz_drop_buffer(gctx, contents); + pdf_drop_obj(gctx, page_obj); + } + fz_catch(gctx) { + return NULL; + } + pdf->dirty = 1; + return_none; + } + + //--------------------------------------------------------------------- + // Create sub-document to keep only selected pages. + // Parameter is a Python sequence of the wanted page numbers. + //--------------------------------------------------------------------- + FITZEXCEPTION(select, !result) + %pythonprepend select %{"""Build sub-pdf with page numbers in the list.""" +if self.isClosed or self.isEncrypted: + raise ValueError("document closed or encrypted") +if not self.isPDF: + raise ValueError("not a PDF") +if not hasattr(pyliste, "__getitem__"): + raise ValueError("sequence required") +if len(pyliste) == 0 or min(pyliste) not in range(len(self)) or max(pyliste) not in range(len(self)): + raise ValueError("bad page number(s)")%} + %pythonappend select %{self._reset_page_refs()%} + PyObject *select(PyObject *pyliste) + { + // preparatory stuff: + // (1) get underlying pdf document, + // (2) transform Python list into integer array + + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + fz_try(gctx) { + // call retainpages (code copy of fz_clean_file.c) + globals glo = {0}; + glo.ctx = gctx; + glo.doc = pdf; + retainpages(gctx, &glo, pyliste); + if (pdf->rev_page_map) + { + pdf_drop_page_tree(gctx, pdf); + } + } + fz_catch(gctx) { + return NULL; + } + pdf->dirty = 1; + return_none; + } + + //--------------------------------------------------------------------- + // remove one page + //--------------------------------------------------------------------- + FITZEXCEPTION(_deletePage, !result) + PyObject *_deletePage(int pno) + { + fz_try(gctx) { + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_specifics(gctx, doc); + pdf_delete_page(gctx, pdf, pno); + if (pdf->rev_page_map) + { + pdf_drop_page_tree(gctx, pdf); + } + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + //******************************************************************** + // get document permissions + //******************************************************************** + %pythoncode%{@property%} + %pythonprepend permissions %{ + """Document permissions.""" + + if self.isEncrypted: + return 0 + %} + PyObject *permissions() + { + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_document_from_fz_document(gctx, doc); + + // for PDF return result of standard function + if (pdf) + return Py_BuildValue("i", pdf_document_permissions(gctx, pdf)); + + // otherwise simulate the PDF return value + int perm = (int) 0xFFFFFFFC; // all permissions granted + // now switch off where needed + if (!fz_has_permission(gctx, doc, FZ_PERMISSION_PRINT)) + perm = perm ^ PDF_PERM_PRINT; + if (!fz_has_permission(gctx, doc, FZ_PERMISSION_EDIT)) + perm = perm ^ PDF_PERM_MODIFY; + if (!fz_has_permission(gctx, doc, FZ_PERMISSION_COPY)) + perm = perm ^ PDF_PERM_COPY; + if (!fz_has_permission(gctx, doc, FZ_PERMISSION_ANNOTATE)) + perm = perm ^ PDF_PERM_ANNOTATE; + return Py_BuildValue("i", perm); + } + + FITZEXCEPTION(_getCharWidths, !result) + CLOSECHECK(_getCharWidths, """Return list of glyphs and glyph widths of a font.""") + PyObject *_getCharWidths(int xref, char *bfname, char *ext, + int ordering, int limit, int idx = 0) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + PyObject *wlist = NULL; + int i, glyph, mylimit; + mylimit = limit; + if (mylimit < 256) mylimit = 256; + int cwlen = 0; + int lang = 0; + const unsigned char *data; + int size, index; + fz_font *font = NULL, *fb_font= NULL; + fz_buffer *buf = NULL; + + fz_try(gctx) { + ASSERT_PDF(pdf); + if (ordering >= 0) { + data = fz_lookup_cjk_font(gctx, ordering, &size, &index); + font = fz_new_font_from_memory(gctx, NULL, data, size, index, 0); + goto weiter; + } + data = fz_lookup_base14_font(gctx, bfname, &size); + if (data) { + font = fz_new_font_from_memory(gctx, bfname, data, size, 0, 0); + goto weiter; + } + buf = JM_get_fontbuffer(gctx, pdf, xref); + if (!buf) { + fz_throw(gctx, FZ_ERROR_GENERIC, "font at xref %d is not supported", xref); + } + font = fz_new_font_from_buffer(gctx, NULL, buf, idx, 0); + + weiter:; + wlist = PyList_New(0); + float adv; + for (i = 0; i < mylimit; i++) + { + glyph = fz_encode_character(gctx, font, i); + adv = fz_advance_glyph(gctx, font, glyph, 0); + if (ordering >= 0) + glyph = i; + + + if (glyph > 0) + { + LIST_APPEND_DROP(wlist, Py_BuildValue("if", glyph, adv)); + } + else + { + LIST_APPEND_DROP(wlist, Py_BuildValue("if", glyph, 0.0)); + } + } + } + fz_always(gctx) { + fz_drop_buffer(gctx, buf); + fz_drop_font(gctx, font); + } + fz_catch(gctx) { + return NULL; + } + return wlist; + } + + FITZEXCEPTION(_getPageObjNumber, !result) + CLOSECHECK0(_getPageObjNumber, """Get (xref, generation) of page number.""") + PyObject *_getPageObjNumber(int pno) + { + fz_document *this_doc = (fz_document *) $self; + int pageCount = fz_count_pages(gctx, this_doc); + int n = pno; + while (n < 0) n += pageCount; + pdf_obj *pageref = NULL; + fz_var(pageref); + pdf_document *pdf = pdf_specifics(gctx, this_doc); + fz_try(gctx) { + if (n >= pageCount) THROWMSG("bad page number(s)"); + ASSERT_PDF(pdf); + pageref = pdf_lookup_page_obj(gctx, pdf, n); + } + fz_catch(gctx) { + return NULL; + } + + return Py_BuildValue("ii", pdf_to_num(gctx, pageref), + pdf_to_gen(gctx, pageref)); + } + + FITZEXCEPTION(_getPageInfo, !result) + CLOSECHECK(_getPageInfo, """List fonts, images, XObjects used on a page.""") + PyObject *_getPageInfo(int pno, int what) + { + fz_document *doc = (fz_document *) $self; + pdf_document *pdf = pdf_specifics(gctx, doc); + int pageCount = fz_count_pages(gctx, doc); + pdf_obj *pageref, *rsrc; + PyObject *liste = NULL; // returned object + int n = pno; // pno < 0 is allowed + while (n < 0) n += pageCount; // make it non-negative + fz_var(liste); + fz_try(gctx) { + if (n >= pageCount) THROWMSG("bad page number(s)"); + ASSERT_PDF(pdf); + pageref = pdf_lookup_page_obj(gctx, pdf, n); + rsrc = pdf_dict_get_inheritable(gctx, pageref, PDF_NAME(Resources)); + if (!pageref || !rsrc) THROWMSG("cannot retrieve page info"); + liste = PyList_New(0); + JM_scan_resources(gctx, pdf, rsrc, liste, what, 0); + } + fz_catch(gctx) + { + Py_XDECREF(liste); + return NULL; + } + return liste; + } + + FITZEXCEPTION(extractFont, !result) + CLOSECHECK(extractFont, """Get a font by xref.""") + PyObject *extractFont(int xref = 0, int info_only = 0) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + + fz_try(gctx) { + ASSERT_PDF(pdf); + } + fz_catch(gctx) { + return NULL; + } + + fz_buffer *buffer = NULL; + pdf_obj *obj, *basefont, *bname; + PyObject *bytes = PyBytes_FromString(""); + char *ext = NULL; + char *fontname = NULL; + PyObject *nulltuple = Py_BuildValue("sssO", "", "", "", bytes); + PyObject *tuple; + Py_ssize_t len = 0; + fz_try(gctx) { + obj = pdf_load_object(gctx, pdf, xref); + pdf_obj *type = pdf_dict_get(gctx, obj, PDF_NAME(Type)); + pdf_obj *subtype = pdf_dict_get(gctx, obj, PDF_NAME(Subtype)); + if(pdf_name_eq(gctx, type, PDF_NAME(Font)) && + strncmp(pdf_to_name(gctx, subtype), "CIDFontType", 11) != 0) + { + basefont = pdf_dict_get(gctx, obj, PDF_NAME(BaseFont)); + if (!basefont || pdf_is_null(gctx, basefont)) + bname = pdf_dict_get(gctx, obj, PDF_NAME(Name)); + else + bname = basefont; + ext = JM_get_fontextension(gctx, pdf, xref); + if (strcmp(ext, "n/a") != 0 && !info_only) + { + buffer = JM_get_fontbuffer(gctx, pdf, xref); + bytes = JM_BinFromBuffer(gctx, buffer); + fz_drop_buffer(gctx, buffer); + } + tuple = PyTuple_New(4); + PyTuple_SET_ITEM(tuple, 0, JM_EscapeStrFromStr(pdf_to_name(gctx, bname))); + PyTuple_SET_ITEM(tuple, 1, JM_UnicodeFromStr(ext)); + PyTuple_SET_ITEM(tuple, 2, JM_UnicodeFromStr(pdf_to_name(gctx, subtype))); + PyTuple_SET_ITEM(tuple, 3, bytes); + } + else + { + tuple = nulltuple; + } + } + fz_always(gctx) { + JM_PyErr_Clear; + JM_Free(fontname); + } + fz_catch(gctx) + { + tuple = Py_BuildValue("sssO", "invalid-name", "", "", bytes); + } + return tuple; + } + + + FITZEXCEPTION(extractImage, !result) + CLOSECHECK(extractImage, """Get image by xref.""") + PyObject *extractImage(int xref) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + pdf_obj *obj = NULL; + fz_buffer *res = NULL; + fz_image *img = NULL; + PyObject *rc = NULL; + const char *ext = NULL; + const char *cs_name = NULL; + int img_type, xres, yres, colorspace; + int smask = 0, width, height, bpc; + fz_var(img); + fz_var(res); + fz_var(obj); + + fz_try(gctx) { + ASSERT_PDF(pdf); + if (!INRANGE(xref, 1, pdf_xref_len(gctx, pdf)-1)) + THROWMSG("xref out of range"); + + obj = pdf_new_indirect(gctx, pdf, xref, 0); + pdf_obj *subtype = pdf_dict_get(gctx, obj, PDF_NAME(Subtype)); + + if (!pdf_name_eq(gctx, subtype, PDF_NAME(Image))) + THROWMSG("xref not an image"); + + pdf_obj *o = pdf_dict_get(gctx, obj, PDF_NAME(SMask)); + if (o) smask = pdf_to_num(gctx, o); + + res = pdf_load_raw_stream(gctx, obj); + unsigned char *c = NULL; + fz_buffer_storage(gctx, res, &c); + img_type = fz_recognize_image_format(gctx, c); + + if (img_type != FZ_IMAGE_UNKNOWN) + { + img = fz_new_image_from_buffer(gctx, res); + ext = JM_image_extension(img_type); + } + else + { + fz_drop_buffer(gctx, res); + res = NULL; + img = pdf_load_image(gctx, pdf, obj); + res = fz_new_buffer_from_image_as_png(gctx, img, + fz_default_color_params); + ext = "png"; + } + fz_image_resolution(img, &xres, &yres); + width = img->w; + height = img->h; + colorspace = img->n; + bpc = img->bpc; + cs_name = fz_colorspace_name(gctx, img->colorspace); + + rc = PyDict_New(); + DICT_SETITEM_DROP(rc, dictkey_ext, + JM_UnicodeFromStr(ext)); + DICT_SETITEM_DROP(rc, dictkey_smask, + Py_BuildValue("i", smask)); + DICT_SETITEM_DROP(rc, dictkey_width, + Py_BuildValue("i", width)); + DICT_SETITEM_DROP(rc, dictkey_height, + Py_BuildValue("i", height)); + DICT_SETITEM_DROP(rc, dictkey_colorspace, + Py_BuildValue("i", colorspace)); + DICT_SETITEM_DROP(rc, dictkey_bpc, + Py_BuildValue("i", bpc)); + DICT_SETITEM_DROP(rc, dictkey_xres, + Py_BuildValue("i", xres)); + DICT_SETITEM_DROP(rc, dictkey_yres, + Py_BuildValue("i", yres)); + DICT_SETITEM_DROP(rc, dictkey_cs_name, + JM_UnicodeFromStr(cs_name)); + DICT_SETITEM_DROP(rc, dictkey_image, + JM_BinFromBuffer(gctx, res)); + } + fz_always(gctx) { + fz_drop_image(gctx, img); + fz_drop_buffer(gctx, res); + pdf_drop_obj(gctx, obj); + } + + fz_catch(gctx) + { + Py_CLEAR(rc); + return_none; + } + if (!rc) + return_none; + return rc; + } + + + //--------------------------------------------------------------------- + // Delete all bookmarks (table of contents) + // returns the list of deleted (now available) xref numbers + //--------------------------------------------------------------------- + CLOSECHECK(_delToC, """Delete the TOC.""") + %pythonappend _delToC %{self.initData()%} + PyObject *_delToC() + { + PyObject *xrefs = PyList_New(0); // create Python list + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + if (!pdf) return xrefs; // not a pdf + + pdf_obj *root, *olroot, *first; + int xref_count, olroot_xref, i, xref; + + // get the main root + root = pdf_dict_get(gctx, pdf_trailer(gctx, pdf), PDF_NAME(Root)); + // get the outline root + olroot = pdf_dict_get(gctx, root, PDF_NAME(Outlines)); + if (!olroot) return xrefs; // no outlines or some problem + + first = pdf_dict_get(gctx, olroot, PDF_NAME(First)); // first outline + + xrefs = JM_outline_xrefs(gctx, first, xrefs); + xref_count = (int) PyList_Size(xrefs); + + olroot_xref = pdf_to_num(gctx, olroot); // delete OL root + pdf_delete_object(gctx, pdf, olroot_xref); // delete OL root + pdf_dict_del(gctx, root, PDF_NAME(Outlines)); // delete OL root + + for (i = 0; i < xref_count; i++) + { + xref = (int) PyInt_AsLong(PyList_GetItem(xrefs, i)); + pdf_delete_object(gctx, pdf, xref); // delete outline item + } + LIST_APPEND_DROP(xrefs, Py_BuildValue("i", olroot_xref)); + pdf->dirty = 1; + return xrefs; + } + + //--------------------------------------------------------------------- + // Check: is xref a stream object? + //--------------------------------------------------------------------- + CLOSECHECK0(isStream, """Check if xref is a stream object.""") + PyObject *isStream(int xref=0) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + if (!pdf) Py_RETURN_FALSE; // not a PDF + return JM_BOOL(pdf_obj_num_is_stream(gctx, pdf, xref)); + } + + //--------------------------------------------------------------------- + // Return or set NeedAppearances + //--------------------------------------------------------------------- + %pythonprepend need_appearances +%{"""Get/set the NeedAppearances value.""" +if self.isClosed: + raise ValueError("document closed") +if not self.isFormPDF: + return None +%} + PyObject *need_appearances(PyObject *value=NULL) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + int oldval = -1; + pdf_obj *app = NULL; + char appkey[] = "NeedAppearances"; + fz_try(gctx) { + pdf_obj *form = pdf_dict_getp(gctx, pdf_trailer(gctx, pdf), + "Root/AcroForm"); + app = pdf_dict_gets(gctx, form, appkey); + if (pdf_is_bool(gctx, app)) { + oldval = pdf_to_bool(gctx, app); + } + + if (EXISTS(value)) { + pdf_dict_puts_drop(gctx, form, appkey, PDF_TRUE); + } else if (value == Py_False) { + pdf_dict_puts_drop(gctx, form, appkey, PDF_FALSE); + } + } + fz_catch(gctx) { + return_none; + } + if (value != Py_None) { + return value; + } + if (oldval >= 0) { + return JM_BOOL(oldval); + } + return_none; + } + + //--------------------------------------------------------------------- + // Return the /SigFlags value + //--------------------------------------------------------------------- + CLOSECHECK0(getSigFlags, """Get /SigFlags value.""") + PyObject *getSigFlags() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + if (!pdf) return Py_BuildValue("i", -1); // not a PDF + size_t sigflag = -1; + fz_try(gctx) { + pdf_obj *sigflags = pdf_dict_getl(gctx, + pdf_trailer(gctx, pdf), + PDF_NAME(Root), + PDF_NAME(AcroForm), + PDF_NAME(SigFlags), + NULL); + if (sigflags) { + sigflag = (size_t) pdf_to_int(gctx, sigflags); + } + } + fz_catch(gctx) { + return Py_BuildValue("i", -1); // any problem + } + return Py_BuildValue("I", sigflag); + } + + //--------------------------------------------------------------------- + // Check: is this an AcroForm with at least one field? + //--------------------------------------------------------------------- + CLOSECHECK0(isFormPDF, """Check if PDF Form document.""") + %pythoncode%{@property%} + PyObject *isFormPDF() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + if (!pdf) Py_RETURN_FALSE; // not a PDF + int count = -1; // init count + fz_try(gctx) { + pdf_obj *fields = pdf_dict_getl(gctx, + pdf_trailer(gctx, pdf), + PDF_NAME(Root), + PDF_NAME(AcroForm), + PDF_NAME(Fields), + NULL); + if (pdf_is_array(gctx, fields)) { + count = pdf_array_len(gctx, fields); + } + } + fz_catch(gctx) { + Py_RETURN_FALSE; + } + if (count >= 0) { + return Py_BuildValue("i", count); + } else { + Py_RETURN_FALSE; + } + } + + //--------------------------------------------------------------------- + // Return the list of field font resource names + //--------------------------------------------------------------------- + CLOSECHECK0(FormFonts, """Get list of field font resource names.""") + %pythoncode%{@property%} + PyObject *FormFonts() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + if (!pdf) return_none; // not a PDF + pdf_obj *fonts = NULL; + PyObject *liste = PyList_New(0); + fz_try(gctx) { + fonts = pdf_dict_getl(gctx, pdf_trailer(gctx, pdf), PDF_NAME(Root), PDF_NAME(AcroForm), PDF_NAME(DR), PDF_NAME(Font), NULL); + if (fonts && pdf_is_dict(gctx, fonts)) // fonts exist + { + int i, n = pdf_dict_len(gctx, fonts); + for (i = 0; i < n; i++) + { + pdf_obj *f = pdf_dict_get_key(gctx, fonts, i); + LIST_APPEND_DROP(liste, JM_UnicodeFromStr(pdf_to_name(gctx, f))); + } + } + } + fz_catch(gctx) return_none; // any problem yields None + return liste; + } + + //--------------------------------------------------------------------- + // Add a field font + //--------------------------------------------------------------------- + FITZEXCEPTION(_addFormFont, !result) + CLOSECHECK(_addFormFont, """Add new form font.""") + PyObject *_addFormFont(char *name, char *font) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + if (!pdf) return_none; // not a PDF + pdf_obj *fonts = NULL; + fz_try(gctx) { + fonts = pdf_dict_getl(gctx, pdf_trailer(gctx, pdf), PDF_NAME(Root), + PDF_NAME(AcroForm), PDF_NAME(DR), PDF_NAME(Font), NULL); + if (!fonts || !pdf_is_dict(gctx, fonts)) + THROWMSG("PDF has no form fonts yet"); + pdf_obj *k = pdf_new_name(gctx, (const char *) name); + pdf_obj *v = JM_pdf_obj_from_str(gctx, pdf, font); + pdf_dict_put(gctx, fonts, k, v); + } + fz_catch(gctx) NULL; + return_none; + } + + //--------------------------------------------------------------------- + // Get Xref Number of Outline Root, create it if missing + //--------------------------------------------------------------------- + FITZEXCEPTION(_getOLRootNumber, !result) + CLOSECHECK(_getOLRootNumber, """Get xref of Outline Root, create it if missing.""") + PyObject *_getOLRootNumber() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + pdf_obj *root, *olroot, *ind_obj; + fz_try(gctx) { + ASSERT_PDF(pdf); + // get main root + root = pdf_dict_get(gctx, pdf_trailer(gctx, pdf), PDF_NAME(Root)); + // get outline root + olroot = pdf_dict_get(gctx, root, PDF_NAME(Outlines)); + if (!olroot) + { + olroot = pdf_new_dict(gctx, pdf, 4); + pdf_dict_put(gctx, olroot, PDF_NAME(Type), PDF_NAME(Outlines)); + ind_obj = pdf_add_object(gctx, pdf, olroot); + pdf_dict_put(gctx, root, PDF_NAME(Outlines), ind_obj); + olroot = pdf_dict_get(gctx, root, PDF_NAME(Outlines)); + pdf_drop_obj(gctx, ind_obj); + pdf->dirty = 1; + } + } + fz_catch(gctx) { + return NULL; + } + return Py_BuildValue("i", pdf_to_num(gctx, olroot)); + } + + //--------------------------------------------------------------------- + // Get a new Xref number + //--------------------------------------------------------------------- + FITZEXCEPTION(_getNewXref, !result) + CLOSECHECK(_getNewXref, """Make new xref.""") + PyObject *_getNewXref() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + fz_try(gctx) { + ASSERT_PDF(pdf); + } + fz_catch(gctx) { + return NULL; + } + pdf->dirty = 1; + return Py_BuildValue("i", pdf_create_object(gctx, pdf)); + } + + //--------------------------------------------------------------------- + // Get Length of Xref + //--------------------------------------------------------------------- + CLOSECHECK0(_getXrefLength, """Get length of xref table.""") + PyObject *_getXrefLength() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + int xreflen = 0; + if (pdf) xreflen = pdf_xref_len(gctx, pdf); + return Py_BuildValue("i", xreflen); + } + + //--------------------------------------------------------------------- + // Get XML Metadata xref + //--------------------------------------------------------------------- + CLOSECHECK0(_getXmlMetadataXref, """Get xref of document XML metadata.""") + PyObject *_getXmlMetadataXref() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + pdf_obj *xml; + int xref = 0; + fz_try(gctx) { + ASSERT_PDF(pdf); + pdf_obj *root = pdf_dict_get(gctx, pdf_trailer(gctx, pdf), PDF_NAME(Root)); + if (!root) THROWMSG("could not load root object"); + xml = pdf_dict_gets(gctx, root, "Metadata"); + if (xml) xref = pdf_to_num(gctx, xml); + } + fz_catch(gctx) {;} + return Py_BuildValue("i", xref); + } + + //--------------------------------------------------------------------- + // Delete XML-based Metadata + //--------------------------------------------------------------------- + FITZEXCEPTION(_delXmlMetadata, !result) + CLOSECHECK(_delXmlMetadata, """Delete XML metadata.""") + PyObject *_delXmlMetadata() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + fz_try(gctx) { + ASSERT_PDF(pdf); + pdf_obj *root = pdf_dict_get(gctx, pdf_trailer(gctx, pdf), PDF_NAME(Root)); + if (root) pdf_dict_dels(gctx, root, "Metadata"); + } + fz_catch(gctx) { + return NULL; + } + pdf->dirty = 1; + return_none; + } + + //--------------------------------------------------------------------- + // Get Object String of xref + //--------------------------------------------------------------------- + FITZEXCEPTION(_getXrefString, !result) + CLOSECHECK0(_getXrefString, """Get xref object source as a string.""") + PyObject *_getXrefString(int xref, int compressed=0, int ascii=0) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + pdf_obj *obj = NULL; + PyObject *text = NULL; + + fz_buffer *res=NULL; + fz_try(gctx) { + ASSERT_PDF(pdf); + int xreflen = pdf_xref_len(gctx, pdf); + if (!INRANGE(xref, 1, xreflen-1)) + THROWMSG("xref out of range"); + obj = pdf_load_object(gctx, pdf, xref); + res = JM_object_to_buffer(gctx, pdf_resolve_indirect(gctx, obj), compressed, ascii); + text = JM_EscapeStrFromBuffer(gctx, res); + } + fz_always(gctx) { + pdf_drop_obj(gctx, obj); + fz_drop_buffer(gctx, res); + } + fz_catch(gctx) return PyUnicode_FromString(""); + return text; + } + + //--------------------------------------------------------------------- + // Get String of PDF trailer + //--------------------------------------------------------------------- + FITZEXCEPTION(_getTrailerString, !result) + CLOSECHECK0(_getTrailerString, """Get PDF trailer as a string.""") + PyObject *_getTrailerString(int compressed=0, int ascii=0) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + if (!pdf) return_none; + PyObject *text = NULL; + fz_buffer *res=NULL; + fz_try(gctx) { + res = JM_object_to_buffer(gctx, pdf_trailer(gctx, pdf), compressed, ascii); + text = JM_EscapeStrFromBuffer(gctx, res); + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + } + fz_catch(gctx) { + return PyUnicode_FromString("PDF trailer damaged"); + } + return text; + } + + //--------------------------------------------------------------------- + // Get compressed stream of an object by xref + // return_none if not stream + //--------------------------------------------------------------------- + FITZEXCEPTION(_getXrefStreamRaw, !result) + CLOSECHECK(_getXrefStreamRaw, """Get xref stream without decompression.""") + PyObject *_getXrefStreamRaw(int xref) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + PyObject *r = Py_None; + pdf_obj *obj = NULL; + fz_var(obj); + fz_buffer *res = NULL; + fz_var(res); + fz_try(gctx) { + ASSERT_PDF(pdf); + int xreflen = pdf_xref_len(gctx, pdf); + if (!INRANGE(xref, 1, xreflen-1)) + THROWMSG("xref out of range"); + obj = pdf_new_indirect(gctx, pdf, xref, 0); + if (pdf_is_stream(gctx, obj)) + { + res = pdf_load_raw_stream_number(gctx, pdf, xref); + r = JM_BinFromBuffer(gctx, res); + } + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + pdf_drop_obj(gctx, obj); + } + fz_catch(gctx) + { + Py_CLEAR(r); + return NULL; + } + return r; + } + + //--------------------------------------------------------------------- + // Get decompressed stream of an object by xref + // return_none if not stream + //--------------------------------------------------------------------- + FITZEXCEPTION(_getXrefStream, !result) + CLOSECHECK(_getXrefStream, """Get decompressed xref stream.""") + PyObject *_getXrefStream(int xref) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + PyObject *r = Py_None; + pdf_obj *obj = NULL; + fz_var(obj); + fz_buffer *res = NULL; + fz_var(res); + fz_try(gctx) { + ASSERT_PDF(pdf); + int xreflen = pdf_xref_len(gctx, pdf); + if (!INRANGE(xref, 1, xreflen-1)) + THROWMSG("xref out of range"); + obj = pdf_new_indirect(gctx, pdf, xref, 0); + if (pdf_is_stream(gctx, obj)) + { + res = pdf_load_stream_number(gctx, pdf, xref); + r = JM_BinFromBuffer(gctx, res); + } + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + pdf_drop_obj(gctx, obj); + } + fz_catch(gctx) + { + Py_CLEAR(r); + return NULL; + } + return r; + } + + //--------------------------------------------------------------------- + // Update an Xref number with a new object given as a string + //--------------------------------------------------------------------- + FITZEXCEPTION(_updateObject, !result) + CLOSECHECK(_updateObject, """Replace object definition source.""") + PyObject *_updateObject(int xref, char *text, struct Page *page = NULL) + { + pdf_obj *new_obj; + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + fz_try(gctx) { + ASSERT_PDF(pdf); + int xreflen = pdf_xref_len(gctx, pdf); + if (!INRANGE(xref, 1, xreflen-1)) + THROWMSG("xref out of range"); + // create new object with passed-in string + new_obj = JM_pdf_obj_from_str(gctx, pdf, text); + pdf_update_object(gctx, pdf, xref, new_obj); + pdf_drop_obj(gctx, new_obj); + if (page) + JM_refresh_link_table(gctx, pdf_page_from_fz_page(gctx, (fz_page *)page)); + } + fz_catch(gctx) { + return NULL; + } + pdf->dirty = 1; + return_none; + } + + //--------------------------------------------------------------------- + // Update a stream identified by its xref + //--------------------------------------------------------------------- + FITZEXCEPTION(_updateStream, !result) + CLOSECHECK(_updateStream, """Replace xref stream part.""") + PyObject *_updateStream(int xref = 0, PyObject *stream = NULL, int new = 0) + { + pdf_obj *obj = NULL; + fz_var(obj); + fz_buffer *res = NULL; + fz_var(res); + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + fz_try(gctx) { + ASSERT_PDF(pdf); + int xreflen = pdf_xref_len(gctx, pdf); + if (!INRANGE(xref, 1, xreflen-1)) + THROWMSG("xref out of range"); + // get the object + obj = pdf_new_indirect(gctx, pdf, xref, 0); + if (!new && !pdf_is_stream(gctx, obj)) + THROWMSG("xref not a stream object"); + res = JM_BufferFromBytes(gctx, stream); + if (!res) THROWMSG("bad type: 'stream'"); + JM_update_stream(gctx, pdf, obj, res, 1); + + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + pdf_drop_obj(gctx, obj); + } + fz_catch(gctx) + return NULL; + pdf->dirty = 1; + return_none; + } + + //--------------------------------------------------------------------- + // Add or update metadata based on provided raw string + //--------------------------------------------------------------------- + FITZEXCEPTION(_setMetadata, !result) + CLOSECHECK(_setMetadata, """Set old style metadata.""") + PyObject *_setMetadata(char *text) + { + pdf_obj *info, *new_info, *new_info_ind; + int info_num = 0; // will contain xref no of info object + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + fz_try(gctx) { + ASSERT_PDF(pdf); + // create new /Info object based on passed-in string + new_info = JM_pdf_obj_from_str(gctx, pdf, text); + } + fz_catch(gctx) { + return NULL; + } + pdf->dirty = 1; + // replace existing /Info object + info = pdf_dict_get(gctx, pdf_trailer(gctx, pdf), PDF_NAME(Info)); + if (info) + { + info_num = pdf_to_num(gctx, info); // get xref no of old info + pdf_update_object(gctx, pdf, info_num, new_info); // insert new + pdf_drop_obj(gctx, new_info); + return_none; + } + // create new indirect object from /Info object + new_info_ind = pdf_add_object(gctx, pdf, new_info); + // put this in the trailer dictionary + pdf_dict_put_drop(gctx, pdf_trailer(gctx, pdf), PDF_NAME(Info), new_info_ind); + return_none; + } + + //--------------------------------------------------------------------- + // create / refresh the page map + //--------------------------------------------------------------------- + FITZEXCEPTION(_make_page_map, !result) + CLOSECHECK0(_make_page_map, """Make an array page number -> page object.""") + PyObject *_make_page_map() + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + if (!pdf) return_none; + fz_try(gctx) { + pdf_drop_page_tree(gctx, pdf); + pdf_load_page_tree(gctx, pdf); + } + fz_catch(gctx) { + return NULL; + } + return Py_BuildValue("i", pdf->rev_page_count); + } + + + //--------------------------------------------------------------------- + // full (deep) copy of one page + //--------------------------------------------------------------------- + FITZEXCEPTION(fullcopyPage, !result) + CLOSECHECK0(fullcopyPage, """Make full page duplication.""") + %pythonappend fullcopyPage %{self._reset_page_refs()%} + PyObject *fullcopyPage(int pno, int to = -1) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + int pageCount = pdf_count_pages(gctx, pdf); + fz_buffer *res = NULL, *nres=NULL; + pdf_obj *page2 = NULL; + fz_try(gctx) { + ASSERT_PDF(pdf); + if (!INRANGE(pno, 0, pageCount - 1) || + !INRANGE(to, -1, pageCount - 1)) + THROWMSG("bad page number(s)"); + + pdf_obj *page1 = pdf_resolve_indirect(gctx, + pdf_lookup_page_obj(gctx, pdf, pno)); + + pdf_obj *page2 = pdf_deep_copy_obj(gctx, page1); + pdf_obj *old_annots = pdf_dict_get(gctx, page2, PDF_NAME(Annots)); + + // copy annotations, but remove Popup and IRT types + if (old_annots) { + int i, n = pdf_array_len(gctx, old_annots); + pdf_obj *new_annots = pdf_new_array(gctx, pdf, n); + for (i = 0; i < n; i++) { + pdf_obj *o = pdf_array_get(gctx, old_annots, i); + pdf_obj *subtype = pdf_dict_get(gctx, o, PDF_NAME(Subtype)); + if (pdf_name_eq(gctx, subtype, PDF_NAME(Popup))) continue; + if (pdf_dict_gets(gctx, o, "IRT")) continue; + pdf_obj *copy_o = pdf_deep_copy_obj(gctx, + pdf_resolve_indirect(gctx, o)); + int xref = pdf_create_object(gctx, pdf); + pdf_update_object(gctx, pdf, xref, copy_o); + pdf_drop_obj(gctx, copy_o); + copy_o = pdf_new_indirect(gctx, pdf, xref, 0); + pdf_dict_del(gctx, copy_o, PDF_NAME(Popup)); + pdf_dict_del(gctx, copy_o, PDF_NAME(P)); + pdf_array_push_drop(gctx, new_annots, copy_o); + } + pdf_dict_put_drop(gctx, page2, PDF_NAME(Annots), new_annots); + } + + // copy the old contents stream(s) + res = JM_read_contents(gctx, page1); + + // create new /Contents object for page2 + if (res) { + pdf_obj *contents = pdf_add_stream(gctx, pdf, + fz_new_buffer_from_copied_data(gctx, " ", 1), NULL, 0); + JM_update_stream(gctx, pdf, contents, res, 1); + pdf_dict_put_drop(gctx, page2, PDF_NAME(Contents), contents); + } + + // now insert target page, making sure it is an indirect object + int xref = pdf_create_object(gctx, pdf); // get new xref + pdf_update_object(gctx, pdf, xref, page2); // store new page + pdf_drop_obj(gctx, page2); // give up this object for now + + page2 = pdf_new_indirect(gctx, pdf, xref, 0); // reread object + pdf_insert_page(gctx, pdf, to, page2); // and store the page + pdf_drop_obj(gctx, page2); + } + fz_always(gctx) { + pdf_drop_page_tree(gctx, pdf); + fz_drop_buffer(gctx, res); + fz_drop_buffer(gctx, nres); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + + //--------------------------------------------------------------------- + // move or copy one page + //--------------------------------------------------------------------- + FITZEXCEPTION(_move_copy_page, !result) + CLOSECHECK0(_move_copy_page, """Move or copy a PDF page reference.""") + %pythonappend _move_copy_page %{self._reset_page_refs()%} + PyObject *_move_copy_page(int pno, int nb, int before, int copy) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) $self); + int i1, i2, pos, count, same = 0; + pdf_obj *parent1 = NULL, *parent2 = NULL, *parent = NULL; + pdf_obj *kids1, *kids2; + fz_try(gctx) { + ASSERT_PDF(pdf); + // get the two page objects ----------------------------------- + // locate the /Kids arrays and indices in each + pdf_obj *page1 = pdf_lookup_page_loc(gctx, pdf, pno, &parent1, &i1); + kids1 = pdf_dict_get(gctx, parent1, PDF_NAME(Kids)); + + pdf_obj *page2 = pdf_lookup_page_loc(gctx, pdf, nb, &parent2, &i2); + kids2 = pdf_dict_get(gctx, parent2, PDF_NAME(Kids)); + + if (before) // calc index of source page in target /Kids + pos = i2; + else + pos = i2 + 1; + + // same /Kids array? ------------------------------------------ + same = pdf_objcmp(gctx, kids1, kids2); + + // put source page in target /Kids array ---------------------- + if (!copy && same != 0) // update parent in page object + { + pdf_dict_put(gctx, page1, PDF_NAME(Parent), parent2); + } + pdf_array_insert(gctx, kids2, page1, pos); + + if (same != 0) // different /Kids arrays ---------------------- + { + parent = parent2; + while (parent) // increase /Count objects in parents + { + count = pdf_dict_get_int(gctx, parent, PDF_NAME(Count)); + pdf_dict_put_int(gctx, parent, PDF_NAME(Count), count + 1); + parent = pdf_dict_get(gctx, parent, PDF_NAME(Parent)); + } + if (!copy) // delete original item + { + pdf_array_delete(gctx, kids1, i1); + parent = parent1; + while (parent) // decrease /Count objects in parents + { + count = pdf_dict_get_int(gctx, parent, PDF_NAME(Count)); + pdf_dict_put_int(gctx, parent, PDF_NAME(Count), count - 1); + parent = pdf_dict_get(gctx, parent, PDF_NAME(Parent)); + } + } + } + else // same /Kids array -------------------------------------- + { + if (copy) // source page is copied + { + parent = parent2; + while (parent) // increase /Count object in parents + { + count = pdf_dict_get_int(gctx, parent, PDF_NAME(Count)); + pdf_dict_put_int(gctx, parent, PDF_NAME(Count), count + 1); + parent = pdf_dict_get(gctx, parent, PDF_NAME(Parent)); + } + } + else + { + if (i1 < pos) + pdf_array_delete(gctx, kids1, i1); + else + pdf_array_delete(gctx, kids1, i1 + 1); + } + } + if (pdf->rev_page_map) // page map no longer valid: drop it + { + pdf_drop_page_tree(gctx, pdf); + } + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + //--------------------------------------------------------------------- + // Initialize document: set outline and metadata properties + //--------------------------------------------------------------------- + %pythoncode %{ + def initData(self): + if self.isEncrypted: + raise ValueError("cannot initData - document still encrypted") + self._outline = self._loadOutline() + self.metadata = dict([(k,self._getMetadata(v)) for k,v in {'format':'format', 'title':'info:Title', 'author':'info:Author','subject':'info:Subject', 'keywords':'info:Keywords','creator':'info:Creator', 'producer':'info:Producer', 'creationDate':'info:CreationDate', 'modDate':'info:ModDate'}.items()]) + self.metadata['encryption'] = None if self._getMetadata('encryption')=='None' else self._getMetadata('encryption') + + outline = property(lambda self: self._outline) + _getPageXref = _getPageObjNumber + + def getPageFontList(self, pno, full=False): + """Retrieve a list of fonts used on a page. + """ + if self.isClosed or self.isEncrypted: + raise ValueError("document closed or encrypted") + if not self.isPDF: + return () + val = self._getPageInfo(pno, 1) + if full is False: + return [v[:-1] for v in val] + return val + + + def getPageImageList(self, pno, full=False): + """Retrieve a list of images used on a page. + """ + if self.isClosed or self.isEncrypted: + raise ValueError("document closed or encrypted") + if not self.isPDF: + return () + val = self._getPageInfo(pno, 2) + if full is False: + return [v[:-1] for v in val] + return val + + + def getPageXObjectList(self, pno): + """Retrieve a list of XObjects used on a page. + """ + if self.isClosed or self.isEncrypted: + raise ValueError("document closed or encrypted") + if not self.isPDF: + return () + val = self._getPageInfo(pno, 3) + return val + + + def copyPage(self, pno, to=-1): + """Copy a page within a PDF document. + + Args: + pno: source page number + to: put before this page, '-1' means after last page. + """ + if self.isClosed: + raise ValueError("document closed") + + pageCount = len(self) + if ( + pno not in range(pageCount) or + to not in range(-1, pageCount) + ): + raise ValueError("bad page number(s)") + before = 1 + copy = 1 + if to == -1: + to = pageCount - 1 + before = 0 + + return self._move_copy_page(pno, to, before, copy) + + def movePage(self, pno, to = -1): + """Move a page within a PDF document. + + Args: + pno: source page number. + to: put before this page, '-1' means after last page. + """ + if self.isClosed: + raise ValueError("document closed") + + pageCount = len(self) + if ( + pno not in range(pageCount) or + to not in range(-1, pageCount) + ): + raise ValueError("bad page number(s)") + before = 1 + copy = 0 + if to == -1: + to = pageCount - 1 + before = 0 + + return self._move_copy_page(pno, to, before, copy) + + def deletePage(self, pno = -1): + """ Delete one page from a PDF. + """ + if not self.isPDF: + raise ValueError("not a PDF") + if self.isClosed: + raise ValueError("document closed") + + pageCount = self.pageCount + while pno < 0: + pno += pageCount + + if not pno in range(pageCount): + raise ValueError("bad page number(s)") + + old_toc = self.getToC(False) + new_toc = _toc_remove_page(old_toc, pno+1, pno+1) + self._remove_links_to(pno, pno) + + self._deletePage(pno) + + self.setToC(new_toc) + self._reset_page_refs() + + + + def deletePageRange(self, from_page = -1, to_page = -1): + """Delete pages from a PDF. + """ + if not self.isPDF: + raise ValueError("not a PDF") + if self.isClosed: + raise ValueError("document closed") + + pageCount = self.pageCount # page count of document + f = from_page # first page to delete + t = to_page # last page to delete + while f < 0: + f += pageCount + while t < 0: + t += pageCount + if not f <= t < pageCount: + raise ValueError("bad page number(s)") + + old_toc = self.getToC(False) + new_toc = _toc_remove_page(old_toc, f+1, t+1) + self._remove_links_to(f, t) + + for i in range(t, f - 1, -1): # delete pages, last to first + self._deletePage(i) + + self.setToC(new_toc) + self._reset_page_refs() + + + def saveIncr(self): + """ Save PDF incrementally""" + return self.save(self.name, incremental=True, encryption=PDF_ENCRYPT_KEEP) + + + def xrefLength(self): + """Return the length of the xref table. + """ + return self._getXrefLength() + + + def get_pdf_object(self, xref, compressed=False, ascii=False): + """Return the object definition of an xref. + """ + return self._getXrefString(xref, compressed, ascii) + + + def updateObject(self, xref, text, page=None): + """Repleace the object at xref with text. + + Optionally reload a page. + """ + return self._updateObject(xref, text, page=page) + + + def xrefStream(self, xref): + """Return the decompressed stream content of an xref. + """ + return self._getXrefStream(xref) + + + def xrefStreamRaw(self, xref): + """ Return the raw stream content of an xref. + """ + return self._getXrefStreamRaw(xref) + + + def updateStream(self, xref, stream, new=False): + """Repleace the stream at xref with stream (bytes). + """ + return self._updateStream(xref, stream, new=new) + + + def PDFTrailer(self, compressed=False, ascii=False): + """Return the PDF trailer string. + """ + return self._getTrailerString(compressed, ascii) + + + def PDFCatalog(self): + """Return the xref of the PDF catalog object. + """ + return self._getPDFroot() + + + def metadataXML(self): + """Get xref of document XML metadata.""" + return self._getXmlMetadataXref() + + + def reload_page(self, page): + """Make a fresh copy of a page.""" + old_annots = {} # copy annot references to here + pno = page.number # save the page number + for k, v in page._annot_refs.items(): # save the annot dictionary + old_annots[k] = v + page._erase() # remove the page + page = None + page = self.loadPage(pno) # reload the page + + # copy annot refs over to the new dictionary + page_proxy = weakref.proxy(page) + for k, v in old_annots.items(): + annot = old_annots[k] + annot.parent = page_proxy # refresh parent to new page + page._annot_refs[k] = annot + return page + + + xrefObject = get_pdf_object + + + def __repr__(self): + m = "closed " if self.isClosed else "" + if self.stream is None: + if self.name == "": + return m + "Document()" % self._graft_id + return m + "Document('%s')" % (self.name,) + return m + "Document('%s', )" % (self.name, self._graft_id) + + + def __contains__(self, loc): + if type(loc) is int: + if loc < self.pageCount: + return True + return False + if type(loc) not in (tuple, list) or len(loc) != 2: + return False + + chapter, pno = loc + if (type(chapter) != int or + chapter < 0 or + chapter >= self.chapterCount + ): + return False + if (type(pno) != int or + pno < 0 or + pno >= self.chapterPageCount(chapter) + ): + return False + + return True + + + def __getitem__(self, i=0): + if i not in self: + raise IndexError("page not in document") + return self.loadPage(i) + + def pages(self, start=None, stop=None, step=None): + """Return a generator iterator over a page range. + + Arguments have the same meaning as for the range() built-in. + """ + # set the start value + start = start or 0 + while start < 0: + start += self.pageCount + if start not in range(self.pageCount): + raise ValueError("bad start page number") + + # set the stop value + stop = stop if stop is not None and stop <= self.pageCount else self.pageCount + + # set the step value + if step == 0: + raise ValueError("arg 3 must not be zero") + if step is None: + if start > stop: + step = -1 + else: + step = 1 + + for pno in range(start, stop, step): + yield (self.loadPage(pno)) + + + def __len__(self): + return self.pageCount + + def _forget_page(self, page): + """Remove a page from document page dict.""" + pid = id(page) + if pid in self._page_refs: + self._page_refs[pid] = None + + def _reset_page_refs(self): + """Invalidate all pages in document dictionary.""" + if self.isClosed: + return + for page in self._page_refs.values(): + if page: + page._erase() + page = None + self._page_refs.clear() + + def __del__(self): + if hasattr(self, "_reset_page_refs"): + self._reset_page_refs() + if hasattr(self, "Graftmaps"): + for gmap in self.Graftmaps: + self.Graftmaps[gmap] = None + if hasattr(self, "this") and self.thisown: + self.__swig_destroy__(self) + self.thisown = False + + self.Graftmaps = {} + self.ShownPages = {} + self.stream = None + self._reset_page_refs = DUMMY + self.__swig_destroy__ = DUMMY + self.isClosed = True + + def __enter__(self): + return self + + def __exit__(self, *args): + self.close() + %} + } +}; + +/*****************************************************************************/ +// fz_page +/*****************************************************************************/ +%nodefaultctor; +struct Page { + %extend { + ~Page() + { + DEBUGMSG1("Page"); + fz_page *this_page = (fz_page *) $self; + fz_drop_page(gctx, this_page); + DEBUGMSG2; + } + //--------------------------------------------------------------------- + // bound() + //--------------------------------------------------------------------- + PARENTCHECK(bound, """Get page rectangle.""") + %pythonappend bound %{val = Rect(val)%} + PyObject *bound() { + fz_rect rect = fz_bound_page(gctx, (fz_page *) $self); + return JM_py_from_rect(rect); + } + %pythoncode %{rect = property(bound, doc="page rectangle")%} + + //--------------------------------------------------------------------- + // Page.getImageBbox + //--------------------------------------------------------------------- + %pythonprepend getImageBbox %{ + """Get rectangle occupied by image 'name'. + + 'name' is either an item of the image full list, or the referencing + name string.""" + CheckParent(self) + doc = self.parent + if doc.isClosed or doc.isEncrypted: + raise ValueError("doc is closed or encrypted") + inf_rect = Rect(1, 1, -1, -1) + if type(name) in (list, tuple): + if not type(name[-1]) is int: + raise ValueError("need a full page image list item") + item = name + if item[-1] != 0: + raise ValueError("unsupported image item") + else: + imglist = [i for i in doc.getPageImageList(self.number, True) if i[-1] == 0 and name == i[-3]] + if len(imglist) == 1: + item = imglist[0] + else: + raise ValueError("no valid image found")%} + %pythonappend getImageBbox %{ + if not bool(val): + return inf_rect + rc = inf_rect + for v in val: + if v[0] == item[-3]: + rc = Quad(v[1]).rect + break + val = rc * self.transformationMatrix%} + PyObject * + getImageBbox(PyObject *name) + { + pdf_page *pdf_page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + PyObject *rc =NULL; + fz_try(gctx) { + rc = JM_image_reporter(gctx, pdf_page); + } + fz_catch(gctx) { + return_none; + } + return rc; + } + + //--------------------------------------------------------------------- + // run() + //--------------------------------------------------------------------- + FITZEXCEPTION(run, !result) + PARENTCHECK(run, """Run page through a device.""") + PyObject *run(struct DeviceWrapper *dw, PyObject *m) + { + fz_try(gctx) { + fz_run_page(gctx, (fz_page *) $self, dw->device, JM_matrix_from_py(m), NULL); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + //--------------------------------------------------------------------- + // Page.getTextPage + //--------------------------------------------------------------------- + FITZEXCEPTION(_get_text_page, !result) + struct TextPage * + _get_text_page(int flags=0) + { + fz_stext_page *textpage=NULL; + fz_try(gctx) { + textpage = JM_new_stext_page_from_page(gctx, (fz_page *) $self, flags); + } + fz_catch(gctx) { + return NULL; + } + return (struct TextPage *) textpage; + } + %pythoncode %{ + def getTextPage(self, flags=0): + CheckParent(self) + old_rotation = self.rotation + if old_rotation != 0: + self.setRotation(0) + try: + textpage = self._get_text_page(flags=flags) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + return textpage + %} + + //--------------------------------------------------------------------- + // Page.language + //--------------------------------------------------------------------- + %pythoncode%{@property%} + %pythonprepend language %{"""Page language."""%} + PyObject *language() + { + pdf_page *pdfpage = pdf_page_from_fz_page(gctx, (fz_page *) $self); + if (!pdfpage) return_none; + pdf_obj *lang = pdf_dict_get_inheritable(gctx, pdfpage->obj, PDF_NAME(Lang)); + if (!lang) return_none; + return Py_BuildValue("s", pdf_to_str_buf(gctx, lang)); + } + + + //--------------------------------------------------------------------- + // Page.setLanguage + //--------------------------------------------------------------------- + FITZEXCEPTION(setLanguage, !result) + PARENTCHECK(setLanguage, """Set PDF page default language.""") + PyObject *setLanguage(char *language=NULL) + { + pdf_page *pdfpage = pdf_page_from_fz_page(gctx, (fz_page *) $self); + fz_try(gctx) { + ASSERT_PDF(pdfpage); + fz_text_language lang; + char buf[8]; + if (!language) { + pdf_dict_del(gctx, pdfpage->obj, PDF_NAME(Lang)); + } else { + lang = fz_text_language_from_string(language); + pdf_dict_put_text_string(gctx, pdfpage->obj, + PDF_NAME(Lang), + fz_string_from_text_language(buf, lang)); + } + } + fz_catch(gctx) { + return NULL; + } + Py_RETURN_TRUE; + } + + + //--------------------------------------------------------------------- + // Page.getSVGimage + //--------------------------------------------------------------------- + FITZEXCEPTION(getSVGimage, !result) + PARENTCHECK(getSVGimage, """Make SVG image from page.""") + PyObject *getSVGimage(PyObject *matrix = NULL) + { + fz_rect mediabox = fz_bound_page(gctx, (fz_page *) $self); + fz_device *dev = NULL; + fz_buffer *res = NULL; + PyObject *text = NULL; + fz_matrix ctm = JM_matrix_from_py(matrix); + fz_output *out = NULL; + fz_separations *seps = NULL; + fz_var(out); + fz_var(dev); + fz_var(res); + fz_rect tbounds = mediabox; + tbounds = fz_transform_rect(tbounds, ctm); + + fz_try(gctx) { + res = fz_new_buffer(gctx, 1024); + out = fz_new_output_with_buffer(gctx, res); + dev = fz_new_svg_device(gctx, out, + tbounds.x1-tbounds.x0, // width + tbounds.y1-tbounds.y0, // height + FZ_SVG_TEXT_AS_PATH, 1); + fz_run_page(gctx, (fz_page *) $self, dev, ctm, NULL); + fz_close_device(gctx, dev); + text = JM_EscapeStrFromBuffer(gctx, res); + } + fz_always(gctx) { + fz_drop_device(gctx, dev); + fz_drop_output(gctx, out); + fz_drop_buffer(gctx, res); + } + fz_catch(gctx) { + return NULL; + } + return text; + } + + //--------------------------------------------------------------------- + // page addCaretAnnot + //--------------------------------------------------------------------- + FITZEXCEPTION(_add_caret_annot, !result) + struct Annot * + _add_caret_annot(PyObject *point) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_annot *annot = NULL; + fz_try(gctx) { + annot = pdf_create_annot(gctx, page, PDF_ANNOT_CARET); + if (point) + { + fz_point p = JM_point_from_py(point); + fz_rect r = pdf_annot_rect(gctx, annot); + r = fz_make_rect(p.x, p.y, p.x + r.x1 - r.x0, p.y + r.y1 - r.y0); + pdf_set_annot_rect(gctx, annot, r); + } + JM_add_annot_id(gctx, annot, "fitzannot"); + pdf_update_annot(gctx, annot); + } + fz_catch(gctx) { + return NULL; + } + annot = pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + + //--------------------------------------------------------------------- + // page addRedactAnnot + //--------------------------------------------------------------------- + FITZEXCEPTION(_add_redact_annot, !result) + struct Annot * + _add_redact_annot(PyObject *quad, + char *text=NULL, + const char *da_str=NULL, + int align=0, + PyObject *fill=NULL, + PyObject *text_color=NULL) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_annot *annot = NULL; + float fcol[4] = { 1, 1, 1, 0}; + int nfcol = 0, i; + fz_try(gctx) { + annot = pdf_create_annot(gctx, page, PDF_ANNOT_REDACT); + fz_quad q = JM_quad_from_py(quad); + fz_rect r = fz_rect_from_quad(q); + + // TODO calculate de-rotated rect + pdf_set_annot_rect(gctx, annot, r); + if (EXISTS(fill)) { + JM_color_FromSequence(fill, &nfcol, fcol); + pdf_obj *arr = pdf_new_array(gctx, page->doc, nfcol); + for (i = 0; i < nfcol; i++) + { + pdf_array_push_real(gctx, arr, fcol[i]); + } + pdf_dict_put_drop(gctx, annot->obj, PDF_NAME(IC), arr); + } + if (text) { + pdf_dict_puts_drop(gctx, annot->obj, "OverlayText", + pdf_new_text_string(gctx, text)); + pdf_dict_put_text_string(gctx,annot->obj, PDF_NAME(DA), da_str); + pdf_dict_put_int(gctx, annot->obj, PDF_NAME(Q), (int64_t) align); + } + JM_add_annot_id(gctx, annot, "fitzannot"); + pdf_update_annot(gctx, annot); + } + fz_catch(gctx) { + return NULL; + } + annot = pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + //--------------------------------------------------------------------- + // page addLineAnnot + //--------------------------------------------------------------------- + FITZEXCEPTION(_add_line_annot, !result) + struct Annot * + _add_line_annot(PyObject *p1, PyObject *p2) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_annot *annot = NULL; + fz_try(gctx) { + ASSERT_PDF(page); + annot = pdf_create_annot(gctx, page, PDF_ANNOT_LINE); + fz_point a = JM_point_from_py(p1); + fz_point b = JM_point_from_py(p2); + pdf_set_annot_line(gctx, annot, a, b); + JM_add_annot_id(gctx, annot, "fitzannot"); + pdf_update_annot(gctx, annot); + } + fz_catch(gctx) { + return NULL; + } + annot = pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + //--------------------------------------------------------------------- + // page addTextAnnot + //--------------------------------------------------------------------- + FITZEXCEPTION(_add_text_annot, !result) + struct Annot * + _add_text_annot(PyObject *point, + char *text, + char *icon=NULL) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_annot *annot = NULL; + fz_rect r; + fz_point p = JM_point_from_py(point); + fz_var(annot); + fz_try(gctx) { + ASSERT_PDF(page); + annot = pdf_create_annot(gctx, page, PDF_ANNOT_TEXT); + r = pdf_annot_rect(gctx, annot); + r = fz_make_rect(p.x, p.y, p.x + r.x1 - r.x0, p.y + r.y1 - r.y0); + pdf_set_annot_rect(gctx, annot, r); + int flags = PDF_ANNOT_IS_PRINT; + pdf_set_annot_flags(gctx, annot, flags); + pdf_set_annot_contents(gctx, annot, text); + if (icon) { + pdf_set_annot_icon_name(gctx, annot, icon); + } + JM_add_annot_id(gctx, annot, "fitzannot"); + pdf_update_annot(gctx, annot); + pdf_set_annot_rect(gctx, annot, r); + pdf_set_annot_flags(gctx, annot, flags); + } + fz_catch(gctx) { + return NULL; + } + annot = pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + //--------------------------------------------------------------------- + // page addInkAnnot + //--------------------------------------------------------------------- + FITZEXCEPTION(_add_ink_annot, !result) + struct Annot * + _add_ink_annot(PyObject *list) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_annot *annot = NULL; + PyObject *p = NULL, *sublist = NULL; + pdf_obj *inklist = NULL, *stroke = NULL; + fz_matrix ctm, inv_ctm; + fz_point point; + fz_var(annot); + fz_try(gctx) { + ASSERT_PDF(page); + if (!PySequence_Check(list)) THROWMSG("arg must be a sequence"); + pdf_page_transform(gctx, page, NULL, &ctm); + inv_ctm = fz_invert_matrix(ctm); + annot = pdf_create_annot(gctx, page, PDF_ANNOT_INK); + Py_ssize_t i, j, n0 = PySequence_Size(list), n1; + inklist = pdf_new_array(gctx, annot->page->doc, n0); + + for (j = 0; j < n0; j++) { + sublist = PySequence_ITEM(list, j); + n1 = PySequence_Size(sublist); + stroke = pdf_new_array(gctx, annot->page->doc, 2 * n1); + + for (i = 0; i < n1; i++) { + p = PySequence_ITEM(sublist, i); + if (!PySequence_Check(p) || PySequence_Size(p) != 2) + THROWMSG("3rd level entries must be pairs of floats"); + point = fz_transform_point(JM_point_from_py(p), inv_ctm); + pdf_array_push_real(gctx, stroke, point.x); + pdf_array_push_real(gctx, stroke, point.y); + } + + pdf_array_push_drop(gctx, inklist, stroke); + stroke = NULL; + Py_CLEAR(sublist); + } + + pdf_dict_put_drop(gctx, annot->obj, PDF_NAME(InkList), inklist); + inklist = NULL; + pdf_dirty_annot(gctx, annot); + JM_add_annot_id(gctx, annot, "fitzannot"); + pdf_update_annot(gctx, annot); + } + + fz_catch(gctx) { + Py_CLEAR(p); + Py_CLEAR(sublist); + return NULL; + } + annot = pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + //--------------------------------------------------------------------- + // page addStampAnnot + //--------------------------------------------------------------------- + FITZEXCEPTION(_add_stamp_annot, !result) + struct Annot * + _add_stamp_annot(PyObject *rect, int stamp=0) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_annot *annot = NULL; + pdf_obj *stamp_id[] = {PDF_NAME(Approved), PDF_NAME(AsIs), + PDF_NAME(Confidential), PDF_NAME(Departmental), + PDF_NAME(Experimental), PDF_NAME(Expired), + PDF_NAME(Final), PDF_NAME(ForComment), + PDF_NAME(ForPublicRelease), PDF_NAME(NotApproved), + PDF_NAME(NotForPublicRelease), PDF_NAME(Sold), + PDF_NAME(TopSecret), PDF_NAME(Draft)}; + int n = nelem(stamp_id); + pdf_obj *name = stamp_id[0]; + fz_try(gctx) { + ASSERT_PDF(page); + fz_rect r = JM_rect_from_py(rect); + if (fz_is_infinite_rect(r) || fz_is_empty_rect(r)) + THROWMSG("rect must be finite and not empty"); + if (INRANGE(stamp, 0, n-1)) + name = stamp_id[stamp]; + annot = pdf_create_annot(gctx, page, PDF_ANNOT_STAMP); + pdf_set_annot_rect(gctx, annot, r); + pdf_dict_put(gctx, annot->obj, PDF_NAME(Name), name); + pdf_set_annot_contents(gctx, annot, + pdf_dict_get_name(gctx, annot->obj, PDF_NAME(Name))); + JM_add_annot_id(gctx, annot, "fitzannot"); + pdf_update_annot(gctx, annot); + } + fz_catch(gctx) { + return NULL; + } + annot = pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + //--------------------------------------------------------------------- + // page addFileAnnot + //--------------------------------------------------------------------- + FITZEXCEPTION(_add_file_annot, !result) + struct Annot * + _add_file_annot(PyObject *point, + PyObject *buffer, + char *filename, + char *ufilename=NULL, + char *desc=NULL, + char *icon=NULL) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_annot *annot = NULL; + char *uf = ufilename, *d = desc; + if (!ufilename) uf = filename; + if (!desc) d = filename; + fz_buffer *filebuf = NULL; + fz_rect r; + fz_point p = JM_point_from_py(point); + fz_var(annot); + fz_try(gctx) { + ASSERT_PDF(page); + filebuf = JM_BufferFromBytes(gctx, buffer); + if (!filebuf) THROWMSG("bad type: 'buffer'"); + annot = pdf_create_annot(gctx, page, PDF_ANNOT_FILE_ATTACHMENT); + r = pdf_annot_rect(gctx, annot); + r = fz_make_rect(p.x, p.y, p.x + r.x1 - r.x0, p.y + r.y1 - r.y0); + pdf_set_annot_rect(gctx, annot, r); + int flags = PDF_ANNOT_IS_PRINT; + pdf_set_annot_flags(gctx, annot, flags); + + if (icon) + pdf_set_annot_icon_name(gctx, annot, icon); + + pdf_obj *val = JM_embed_file(gctx, page->doc, filebuf, + filename, uf, d, 1); + pdf_dict_put(gctx, annot->obj, PDF_NAME(FS), val); + pdf_dict_put_text_string(gctx, annot->obj, PDF_NAME(Contents), filename); + JM_add_annot_id(gctx, annot, "fitzannot"); + pdf_update_annot(gctx, annot); + pdf_set_annot_rect(gctx, annot, r); + pdf_set_annot_flags(gctx, annot, flags); + } + fz_catch(gctx) { + return NULL; + } + annot = pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + + //--------------------------------------------------------------------- + // page: add a text marker annotation + //--------------------------------------------------------------------- + FITZEXCEPTION(_add_text_marker, !result) + + %pythonprepend _add_text_marker %{ + CheckParent(self) + if not self.parent.isPDF: + raise ValueError("not a PDF")%} + + %pythonappend _add_text_marker %{ + if not val: + return None + val.parent = weakref.proxy(self) + self._annot_refs[id(val)] = val%} + + struct Annot * + _add_text_marker(PyObject *quads, int annot_type) + { + pdf_page *pdfpage = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_annot *annot = NULL; + PyObject *item = NULL; + int rotation = JM_page_rotation(gctx, pdfpage); + fz_quad q; + fz_var(annot); + fz_var(item); + fz_try(gctx) { + if (rotation != 0) { + pdf_dict_put_int(gctx, pdfpage->obj, PDF_NAME(Rotate), 0); + } + annot = pdf_create_annot(gctx, pdfpage, annot_type); + Py_ssize_t i, len = PySequence_Size(quads); + for (i = 0; i < len; i++) { + item = PySequence_ITEM(quads, i); + q = JM_quad_from_py(item); + Py_DECREF(item); + pdf_add_annot_quad_point(gctx, annot, q); + } + JM_add_annot_id(gctx, annot, "fitzannot"); + pdf_update_annot(gctx, annot); + } + fz_always(gctx) { + if (rotation != 0) { + pdf_dict_put_int(gctx, pdfpage->obj, PDF_NAME(Rotate), rotation); + } + } + fz_catch(gctx) { + pdf_drop_annot(gctx, annot); + return NULL; + } + annot = pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + + //--------------------------------------------------------------------- + // page: add circle or rectangle annotation + //--------------------------------------------------------------------- + FITZEXCEPTION(_add_square_or_circle, !result) + struct Annot * + _add_square_or_circle(PyObject *rect, int annot_type) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_annot *annot = NULL; + fz_try(gctx) { + fz_rect r = JM_rect_from_py(rect); + if (fz_is_infinite_rect(r) || fz_is_empty_rect(r)) + THROWMSG("rect must be finite and not empty"); + annot = pdf_create_annot(gctx, page, annot_type); + pdf_set_annot_rect(gctx, annot, r); + JM_add_annot_id(gctx, annot, "fitzannot"); + pdf_update_annot(gctx, annot); + } + fz_catch(gctx) { + return NULL; + } + annot = pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + + //--------------------------------------------------------------------- + // page: add multiline annotation + //--------------------------------------------------------------------- + FITZEXCEPTION(_add_multiline, !result) + struct Annot * + _add_multiline(PyObject *points, int annot_type) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_annot *annot = NULL; + fz_try(gctx) { + Py_ssize_t i, n = PySequence_Size(points); + if (n < 2) THROWMSG("bad list of points"); + annot = pdf_create_annot(gctx, page, annot_type); + for (i = 0; i < n; i++) { + PyObject *p = PySequence_ITEM(points, i); + if (PySequence_Size(p) != 2) { + Py_DECREF(p); + THROWMSG("bad list of points"); + } + fz_point point = JM_point_from_py(p); + Py_DECREF(p); + pdf_add_annot_vertex(gctx, annot, point); + } + + JM_add_annot_id(gctx, annot, "fitzannot"); + pdf_update_annot(gctx, annot); + } + fz_catch(gctx) { + return NULL; + } + annot = pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + + //--------------------------------------------------------------------- + // page addFreetextAnnot + //--------------------------------------------------------------------- + FITZEXCEPTION(_add_freetext_annot, !result) + struct Annot * + _add_freetext_annot(PyObject *rect, char *text, + float fontsize=11, + char *fontname=NULL, + PyObject *text_color=NULL, + PyObject *fill_color=NULL, + int align=0, + int rotate=0) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + float fcol[4] = {1, 1, 1, 1}; // fill color: white + int nfcol = 0; + JM_color_FromSequence(fill_color, &nfcol, fcol); + float tcol[4] = {0, 0, 0, 0}; // std. text color: black + int ntcol = 0; + JM_color_FromSequence(text_color, &ntcol, tcol); + fz_rect r = JM_rect_from_py(rect); + pdf_annot *annot = NULL; + fz_try(gctx) { + if (fz_is_infinite_rect(r) || fz_is_empty_rect(r)) + THROWMSG("rect must be finite and not empty"); + annot = pdf_create_annot(gctx, page, PDF_ANNOT_FREE_TEXT); + pdf_set_annot_contents(gctx, annot, text); + pdf_set_annot_rect(gctx, annot, r); + pdf_dict_put_int(gctx, annot->obj, PDF_NAME(Rotate), rotate); + pdf_dict_put_int(gctx, annot->obj, PDF_NAME(Q), align); + + if (fill_color) { + pdf_set_annot_color(gctx, annot, nfcol, fcol); + } + + // insert the default appearance string + JM_make_annot_DA(gctx, annot, ntcol, tcol, fontname, fontsize); + JM_add_annot_id(gctx, annot, "fitzannot"); + pdf_update_annot(gctx, annot); + } + fz_catch(gctx) { + return NULL; + } + annot = pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + + %pythoncode %{ + @property + def rotationMatrix(self): + """Reflects page rotation.""" + return Matrix(TOOLS._rotate_matrix(self)) + + @property + def derotationMatrix(self): + """Reflects page de-rotation.""" + return Matrix(TOOLS._derotate_matrix(self)) + + def addCaretAnnot(self, point): + """Add a 'Caret' annotation.""" + old_rotation = annot_preprocess(self) + try: + annot = self._add_caret_annot(point) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + annot_postprocess(self, annot) + return annot + + + def addStrikeoutAnnot(self, quads=None, start=None, stop=None, clip=None): + """Add a 'StrikeOut' annotation.""" + if quads is None: + q = get_highlight_selection(self, start=start, stop=stop, clip=clip) + else: + q = CheckMarkerArg(quads) + return self._add_text_marker(q, PDF_ANNOT_STRIKE_OUT) + + + def addUnderlineAnnot(self, quads=None, start=None, stop=None, clip=None): + """Add a 'Underline' annotation.""" + if quads is None: + q = get_highlight_selection(self, start=start, stop=stop, clip=clip) + else: + q = CheckMarkerArg(quads) + return self._add_text_marker(q, PDF_ANNOT_UNDERLINE) + + + def addSquigglyAnnot(self, quads=None, start=None, + stop=None, clip=None): + """Add a 'Squiggly' annotation.""" + if quads is None: + q = get_highlight_selection(self, start=start, stop=stop, clip=clip) + else: + q = CheckMarkerArg(quads) + return self._add_text_marker(q, PDF_ANNOT_SQUIGGLY) + + + def addHighlightAnnot(self, quads=None, start=None, + stop=None, clip=None): + """Add a 'Highlight' annotation.""" + if quads is None: + q = get_highlight_selection(self, start=start, stop=stop, clip=clip) + else: + q = CheckMarkerArg(quads) + return self._add_text_marker(q, PDF_ANNOT_HIGHLIGHT) + + + def addRectAnnot(self, rect): + """Add a 'Square' (rectangle) annotation.""" + old_rotation = annot_preprocess(self) + try: + annot = self._add_square_or_circle(rect, PDF_ANNOT_SQUARE) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + annot_postprocess(self, annot) + return annot + + + def addCircleAnnot(self, rect): + """Add a 'Circle' (ellipse, oval) annotation.""" + old_rotation = annot_preprocess(self) + try: + annot = self._add_square_or_circle(rect, PDF_ANNOT_CIRCLE) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + annot_postprocess(self, annot) + return annot + + + def addTextAnnot(self, point, text, icon="Note"): + """Add a 'Text' (sticky note) annotation.""" + old_rotation = annot_preprocess(self) + try: + annot = self._add_text_annot(point, text, icon=icon) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + annot_postprocess(self, annot) + return annot + + + def addLineAnnot(self, p1, p2): + """Add a 'Line' annotation.""" + old_rotation = annot_preprocess(self) + try: + annot = self._add_line_annot(p1, p2) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + annot_postprocess(self, annot) + return annot + + + def addPolylineAnnot(self, points): + """Add a 'PolyLine' annotation.""" + old_rotation = annot_preprocess(self) + try: + annot = self._add_multiline(points, PDF_ANNOT_POLY_LINE) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + annot_postprocess(self, annot) + return annot + + + def addPolygonAnnot(self, points): + """Add a 'Polygon' annotation.""" + old_rotation = annot_preprocess(self) + try: + annot = self._add_multiline(points, PDF_ANNOT_POLYGON) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + annot_postprocess(self, annot) + return annot + + + def addStampAnnot(self, rect, stamp=0): + """Add a ('rubber') 'Stamp' annotation.""" + old_rotation = annot_preprocess(self) + try: + annot = self._add_stamp_annot(rect, stamp) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + annot_postprocess(self, annot) + return annot + + + def addInkAnnot(self, handwriting): + """Add a 'Ink' ('handwriting') annotation. + + The argument must be a list of lists of point_likes. + """ + old_rotation = annot_preprocess(self) + try: + annot = self._add_ink_annot(handwriting) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + annot_postprocess(self, annot) + return annot + + + def addFileAnnot(self, point, + buffer, + filename, + ufilename=None, + desc=None, + icon=None): + """Add a 'FileAttachment' annotation.""" + + old_rotation = annot_preprocess(self) + try: + annot = self._add_file_annot(point, + buffer, + filename, + ufilename=ufilename, + desc=desc, + icon=icon) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + annot_postprocess(self, annot) + return annot + + + def addFreetextAnnot(self, rect, text, fontsize=12, + fontname=None, text_color=None, + fill_color=None, align=0, rotate=0): + """Add a 'FreeText' annotation.""" + + old_rotation = annot_preprocess(self) + try: + annot = self._add_freetext_annot(rect, text, fontsize=fontsize, + fontname=fontname, text_color=text_color, + fill_color=fill_color, align=align, rotate=rotate) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + annot_postprocess(self, annot) + return annot + + + def addRedactAnnot(self, quad, text=None, fontname=None, + fontsize=11, align=0, fill=None, text_color=None, + cross_out=True): + """Add a 'Redact' annotation.""" + da_str = None + if text: + CheckColor(fill) + CheckColor(text_color) + if not fontname: + fontname = "Helv" + if not fontsize: + fontsize = 11 + if not text_color: + text_color = (0, 0, 0) + if hasattr(text_color, "__float__"): + text_color = (text_color, text_color, text_color) + if len(text_color) > 3: + text_color = text_color[:3] + fmt = "{:g} {:g} {:g} rg /{f:s} {s:g} Tf" + da_str = fmt.format(*text_color, f=fontname, s=fontsize) + if fill is None: + fill = (1, 1, 1) + if fill: + if hasattr(fill, "__float__"): + fill = (fill, fill, fill) + if len(fill) > 3: + fill = fill[:3] + + old_rotation = annot_preprocess(self) + try: + annot = self._add_redact_annot(quad, text=text, da_str=da_str, + align=align, fill=fill) + finally: + if old_rotation != 0: + self.setRotation(old_rotation) + annot_postprocess(self, annot) + #------------------------------------------------------------------ + # change the generated appearance to show a crossed-out rectangle + #------------------------------------------------------------------ + if cross_out: + ap_tab = annot._getAP().splitlines()[:-1] # get the 4 commands only + _, LL, LR, UR, UL = ap_tab + ap_tab.append(LR) + ap_tab.append(LL) + ap_tab.append(UR) + ap_tab.append(LL) + ap_tab.append(UL) + ap_tab.append(b"S") + ap = b"\n".join(ap_tab) + annot._setAP(ap, 0) + return annot + %} + + + //--------------------------------------------------------------------- + // page load annot by name or xref + //--------------------------------------------------------------------- + FITZEXCEPTION(_load_annot, !result) + struct Annot * + _load_annot(char *name, int xref) + { + pdf_annot *annot = NULL; + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + fz_try(gctx) { + ASSERT_PDF(page); + if (xref == 0) + annot = JM_get_annot_by_name(gctx, page, name); + else + annot = JM_get_annot_by_xref(gctx, page, xref); + } + fz_catch(gctx) { + return NULL; + } + return (struct Annot *) annot; + } + + + //--------------------------------------------------------------------- + // page get list of annot names + //--------------------------------------------------------------------- + PARENTCHECK(annot_names, """List of names of annotations, fields and links.""") + PyObject *annot_names() + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + if (!page) return_none; + return JM_get_annot_id_list(gctx, page); + } + + + //--------------------------------------------------------------------- + // page retrieve list of annotation xrefs + //--------------------------------------------------------------------- + PARENTCHECK(annot_xrefs,"""List of xref numbers of annotations, fields and links.""") + PyObject *annot_xrefs() + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + if (!page) return_none; + return JM_get_annot_xref_list(gctx, page); + } + + + %pythoncode %{ + def loadAnnot(self, ident): + """Load an annot by name (/NM key) or xref. + + Args: + ident: identifier, either name (str) or xref (int). + """ + + CheckParent(self) + if type(ident) is str: + xref = 0 + name = ident + elif type(ident) is int: + xref = ident + name = None + else: + raise ValueError("identifier must be string or integer") + val = self._load_annot(name, xref) + if not val: + return val + val.thisown = True + val.parent = weakref.proxy(self) + self._annot_refs[id(val)] = val + return val + + load_annot = loadAnnot + + + #--------------------------------------------------------------------- + # page addWidget + #--------------------------------------------------------------------- + def addWidget(self, widget): + """Add a 'Widget' (form field).""" + CheckParent(self) + doc = self.parent + if not doc.isPDF: + raise ValueError("not a PDF") + widget._validate() + annot = self._addWidget(widget.field_type, widget.field_name) + if not annot: + return None + annot.thisown = True + annot.parent = weakref.proxy(self) # owning page object + self._annot_refs[id(annot)] = annot + widget.parent = annot.parent + widget._annot = annot + widget.update() + return annot + %} + + FITZEXCEPTION(_addWidget, !result) + struct Annot *_addWidget(int field_type, char *field_name) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_document *pdf = page->doc; + pdf_annot *annot = NULL; + fz_var(annot); + fz_try(gctx) { + annot = JM_create_widget(gctx, pdf, page, field_type, field_name); + if (!annot) THROWMSG("could not create widget"); + JM_add_annot_id(gctx, annot, "fitzwidget"); + } + fz_catch(gctx) { + return NULL; + } + annot = pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + //--------------------------------------------------------------------- + // Page.getDisplayList + //--------------------------------------------------------------------- + FITZEXCEPTION(getDisplayList, !result) + %pythonprepend getDisplayList %{ + """Make a DisplayList from the page for Pixmap generation. + + Include (default) or exclude annotations.""" + + CheckParent(self) + %} + struct DisplayList *getDisplayList(int annots=1) + { + fz_display_list *dl = NULL; + fz_try(gctx) { + if (annots) { + dl = fz_new_display_list_from_page(gctx, (fz_page *) $self); + } else { + dl = fz_new_display_list_from_page_contents(gctx, (fz_page *) $self); + } + } + fz_catch(gctx) { + return NULL; + } + return (struct DisplayList *) dl; + } + + + //--------------------------------------------------------------------- + // Page apply redactions + //--------------------------------------------------------------------- + FITZEXCEPTION(_apply_redactions, !result) + PyObject *_apply_redactions() + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + int success = 0; + pdf_redact_options opts; + opts.no_black_boxes = 1; // no black boxes + opts.keep_images = 0; // do not keep images + fz_try(gctx) { + ASSERT_PDF(page); + success = pdf_redact_page(gctx, page->doc, page, &opts); + } + fz_catch(gctx) { + return NULL; + } + return JM_BOOL(success); + } + + + //--------------------------------------------------------------------- + // Page._makePixmap + //--------------------------------------------------------------------- + FITZEXCEPTION(_makePixmap, !result) + struct Pixmap * + _makePixmap(struct Document *doc, + PyObject *ctm, + struct Colorspace *cs, + int alpha=0, + int annots=1, + PyObject *clip=NULL) + { + fz_pixmap *pix = NULL; + fz_try(gctx) { + pix = JM_pixmap_from_page(gctx, (fz_document *) doc, (fz_page *) $self, ctm, (fz_colorspace *) cs, alpha, annots, clip); + } + fz_catch(gctx) { + return NULL; + } + return (struct Pixmap *) pix; + } + + + //--------------------------------------------------------------------- + // Page.setMediaBox + //--------------------------------------------------------------------- + FITZEXCEPTION(setMediaBox, !result) + PARENTCHECK(setMediaBox, """Set the MediaBox.""") + PyObject *setMediaBox(PyObject *rect) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + fz_try(gctx) { + ASSERT_PDF(page); + fz_rect mediabox = JM_rect_from_py(rect); + if (fz_is_empty_rect(mediabox) || + fz_is_infinite_rect(mediabox)) { + THROWMSG("rect must be finite and not empty"); + } + pdf_dict_put_rect(gctx, page->obj, PDF_NAME(MediaBox), mediabox); + pdf_dict_put_rect(gctx, page->obj, PDF_NAME(CropBox), mediabox); + } + fz_catch(gctx) { + return NULL; + } + page->doc->dirty = 1; + return_none; + } + + //--------------------------------------------------------------------- + // Page.setCropBox + // ATTENTION: This will also change the value returned by Page.bound() + //--------------------------------------------------------------------- + FITZEXCEPTION(setCropBox, !result) + PARENTCHECK(setCropBox, """Set the CropBox.""") + PyObject *setCropBox(PyObject *rect) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + fz_try(gctx) { + ASSERT_PDF(page); + fz_rect mediabox = pdf_bound_page(gctx, page); + pdf_obj *o = pdf_dict_get_inheritable(gctx, page->obj, PDF_NAME(MediaBox)); + if (o) mediabox = pdf_to_rect(gctx, o); + fz_rect cropbox = fz_empty_rect; + fz_rect r = JM_rect_from_py(rect); + cropbox.x0 = r.x0; + cropbox.y0 = mediabox.y1 - r.y1; + cropbox.x1 = r.x1; + cropbox.y1 = mediabox.y1 - r.y0; + pdf_dict_put_drop(gctx, page->obj, PDF_NAME(CropBox), + pdf_new_rect(gctx, page->doc, cropbox)); + } + fz_catch(gctx) { + return NULL; + } + page->doc->dirty = 1; + return_none; + } + + //--------------------------------------------------------------------- + // loadLinks() + //--------------------------------------------------------------------- + PARENTCHECK(loadLinks, """Get first Link.""") + %pythonappend loadLinks %{ + if val: + val.thisown = True + val.parent = weakref.proxy(self) # owning page object + self._annot_refs[id(val)] = val + if self.parent.isPDF: + val.xref = self._getLinkXrefs()[0] + else: + val.xref = 0 + %} + struct Link *loadLinks() + { + fz_link *l = NULL; + fz_try(gctx) { + l = fz_load_links(gctx, (fz_page *) $self); + } + fz_catch(gctx) { + return NULL; + } + return (struct Link *) l; + } + %pythoncode %{firstLink = property(loadLinks, doc="First link on page")%} + + //--------------------------------------------------------------------- + // firstAnnot + //--------------------------------------------------------------------- + PARENTCHECK(firstAnnot, """First annotation.""") + %pythonappend firstAnnot %{ + if val: + val.thisown = True + val.parent = weakref.proxy(self) # owning page object + self._annot_refs[id(val)] = val + %} + %pythoncode %{@property%} + struct Annot *firstAnnot() + { + pdf_annot *annot = NULL; + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + if (page) + { + annot = pdf_first_annot(gctx, page); + if (annot) pdf_keep_annot(gctx, annot); + } + return (struct Annot *) annot; + } + + //--------------------------------------------------------------------- + // firstWidget + //--------------------------------------------------------------------- + %pythoncode %{@property%} + PARENTCHECK(firstWidget, """First widget/field.""") + %pythonappend firstWidget %{ + if val: + val.thisown = True + val.parent = weakref.proxy(self) # owning page object + self._annot_refs[id(val)] = val + widget = Widget() + TOOLS._fill_widget(val, widget) + val = widget + %} + struct Annot *firstWidget() + { + pdf_annot *annot = NULL; + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + if (page) + { + annot = pdf_first_widget(gctx, page); + if (annot) pdf_keep_annot(gctx, annot); + } + return (struct Annot *) annot; + } + + + //--------------------------------------------------------------------- + // Page.deleteLink() - delete link + //--------------------------------------------------------------------- + PARENTCHECK(deleteLink, """Delete a Link.""") + %pythonappend deleteLink +%{if linkdict["xref"] == 0: return +try: + linkid = linkdict["id"] + linkobj = self._annot_refs[linkid] + linkobj._erase() +except: + pass +%} + void deleteLink(PyObject *linkdict) + { + if (!PyDict_Check(linkdict)) return; // have no dictionary + fz_try(gctx) { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + if (!page) goto finished; // have no PDF + int xref = (int) PyInt_AsLong(PyDict_GetItem(linkdict, dictkey_xref)); + if (xref < 1) goto finished; // invalid xref + pdf_obj *annots = pdf_dict_get(gctx, page->obj, PDF_NAME(Annots)); + if (!annots) goto finished; // have no annotations + int len = pdf_array_len(gctx, annots); + int i, oxref = 0; + + for (i = 0; i < len; i++) { + oxref = pdf_to_num(gctx, pdf_array_get(gctx, annots, i)); + if (xref == oxref) break; // found xref in annotations + } + + if (xref != oxref) goto finished; // xref not in annotations + pdf_array_delete(gctx, annots, i); // delete entry in annotations + pdf_delete_object(gctx, page->doc, xref); // delete link object + pdf_dict_put(gctx, page->obj, PDF_NAME(Annots), annots); + JM_refresh_link_table(gctx, page); // reload link / annot tables + page->doc->dirty = 1; + finished:; + } + fz_catch(gctx) {;} + } + + //--------------------------------------------------------------------- + // Page.deleteAnnot() - delete annotation and return the next one + //--------------------------------------------------------------------- + %pythonprepend deleteAnnot %{ + """Delete annot and return next one.""" + CheckParent(self) + CheckParent(annot)%} + + %pythonappend deleteAnnot %{ + if val: + val.thisown = True + val.parent = weakref.proxy(self) # owning page object + val.parent._annot_refs[id(val)] = val + annot._erase() + %} + + struct Annot *deleteAnnot(struct Annot *annot) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_annot *irt_annot = NULL; + while (1) // first loop through all /IRT annots and remove them + { + irt_annot = JM_find_annot_irt(gctx, (pdf_annot *) annot); + if (!irt_annot) // no more there + break; + JM_delete_annot(gctx, page, irt_annot); + } + pdf_annot *nextannot = pdf_next_annot(gctx, (pdf_annot *) annot); // store next + JM_delete_annot(gctx, page, (pdf_annot *) annot); + if (nextannot) + { + nextannot = pdf_keep_annot(gctx, nextannot); + } + page->doc->dirty = 1; + return (struct Annot *) nextannot; + } + + + //--------------------------------------------------------------------- + // MediaBox: get the /MediaBox (PDF only) + //--------------------------------------------------------------------- + %pythoncode %{@property%} + PARENTCHECK(MediaBox, """The MediaBox.""") + %pythonappend MediaBox %{val = Rect(val)%} + PyObject *MediaBox() + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + if (!page) + return JM_py_from_rect(fz_bound_page(gctx, (fz_page *) $self)); + return JM_py_from_rect(JM_mediabox(gctx, page)); + } + + + //--------------------------------------------------------------------- + // CropBox: get the /CropBox (PDF only) + //--------------------------------------------------------------------- + %pythoncode %{@property%} + PARENTCHECK(CropBox, """The CropBox.""") + %pythonappend CropBox %{val = Rect(val)%} + PyObject *CropBox() + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + if (!page) + return JM_py_from_rect(fz_bound_page(gctx, (fz_page *) $self)); + return JM_py_from_rect(JM_cropbox(gctx, page)); + } + + + //--------------------------------------------------------------------- + // CropBox position: x0, y0 of /CropBox + //--------------------------------------------------------------------- + %pythoncode %{ + @property + def CropBoxPosition(self): + return self.CropBox.tl + %} + + + //--------------------------------------------------------------------- + // rotation - return page rotation + //--------------------------------------------------------------------- + PARENTCHECK(rotation, """Page rotation.""") + %pythoncode %{@property%} + int rotation() + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + if (!page) return 0; + return JM_page_rotation(gctx, page); + } + + /*********************************************************************/ + // setRotation() - set page rotation + /*********************************************************************/ + FITZEXCEPTION(setRotation, !result) + PARENTCHECK(setRotation, """Set page rotation.""") + PyObject *setRotation(int rotation) + { + fz_try(gctx) { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + ASSERT_PDF(page); + int rot = JM_norm_rotation(rotation); + pdf_dict_put_int(gctx, page->obj, PDF_NAME(Rotate), (int64_t) rot); + page->doc->dirty = 1; + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + /*********************************************************************/ + // Page._addAnnot_FromString + // Add new links provided as an array of string object definitions. + /*********************************************************************/ + FITZEXCEPTION(_addAnnot_FromString, !result) + PARENTCHECK(_addAnnot_FromString, """Add Link/Annot from object source.""") + PyObject *_addAnnot_FromString(PyObject *linklist) + { + pdf_obj *annots, *annot, *ind_obj, *new_array; + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + PyObject *txtpy; + char *text; + int lcount = (int) PySequence_Size(linklist); // new object count + if (lcount < 1) return_none; + int i; + fz_try(gctx) { + ASSERT_PDF(page); + // get existing annots array + annots = pdf_dict_get(gctx, page->obj, PDF_NAME(Annots)); + if (annots) { + new_array = annots; + } else { + new_array = pdf_new_array(gctx, page->doc, lcount); + pdf_dict_put_drop(gctx, page->obj, PDF_NAME(Annots), new_array); + new_array = pdf_dict_get(gctx, page->obj, PDF_NAME(Annots)); + } + } + fz_catch(gctx) { + return NULL; + } + + // extract object sources from Python list and store as annotations + for (i = 0; i < lcount; i++) { + fz_try(gctx) { + text = NULL; + txtpy = PySequence_ITEM(linklist, (Py_ssize_t) i); + text = JM_Python_str_AsChar(txtpy); + if (!text) THROWMSG("non-string linklist item"); + annot = JM_pdf_obj_from_str(gctx, page->doc, text); + JM_Python_str_DelForPy3(text); + ind_obj = pdf_add_object(gctx, page->doc, annot); + pdf_array_push_drop(gctx, new_array, ind_obj); + pdf_drop_obj(gctx, annot); + } + fz_catch(gctx) { + if (text) + PySys_WriteStderr("%s (%i): '%s'\n", fz_caught_message(gctx), i, text); + else + PySys_WriteStderr("%s (%i)\n", fz_caught_message(gctx), i); + JM_Python_str_DelForPy3(text); + PyErr_Clear(); + } + } + fz_try(gctx) { + JM_refresh_link_table(gctx, page); + } + fz_catch(gctx) { + return NULL; + } + page->doc->dirty = 1; + return_none; + } + + //--------------------------------------------------------------------- + // Page._getLinkXrefs - get list of link xref numbers. + // return_none for non-PDF + //--------------------------------------------------------------------- + PyObject *_getLinkXrefs() + { + pdf_obj *annots, *annots_arr, *link, *obj; + int i, lcount; + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + PyObject *linkxrefs = PyList_New(0); + if (!page) return linkxrefs; // empty list for non-PDF + annots = pdf_dict_get(gctx, page->obj, PDF_NAME(Annots)); + if (!annots) return linkxrefs; // no links on this page + if (pdf_is_indirect(gctx, annots)) + annots_arr = pdf_resolve_indirect(gctx, annots); + else + annots_arr = annots; + lcount = pdf_array_len(gctx, annots_arr); + for (i = 0; i < lcount; i++) + { + link = pdf_array_get(gctx, annots_arr, i); + obj = pdf_dict_get(gctx, link, PDF_NAME(Subtype)); + if (pdf_name_eq(gctx, obj, PDF_NAME(Link))) + { + LIST_APPEND_DROP(linkxrefs, Py_BuildValue("i", pdf_to_num(gctx, link))); + } + } + return linkxrefs; + } + + //--------------------------------------------------------------------- + // Page clean contents stream + //--------------------------------------------------------------------- + PARENTCHECK(_cleanContents, """Clean page /Contents object(s).""") + PyObject *_cleanContents() + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + if (!page) + { + return_none; + } + pdf_filter_options filter = { + NULL, // opaque + NULL, // image filter + NULL, // text filter + NULL, // after text + NULL, // end page + 1, // recurse: true + 1, // instance forms + 1, // sanitize plus filtering + 0 // do not ascii-escape binary data + }; + fz_try(gctx) { + pdf_filter_page_contents(gctx, page->doc, page, &filter); + } + fz_catch(gctx) { + return_none; + } + page->doc->dirty = 1; + return_none; + } + + //--------------------------------------------------------------------- + // Show a PDF page + //--------------------------------------------------------------------- + FITZEXCEPTION(_showPDFpage, !result) + PyObject *_showPDFpage(struct Page *fz_srcpage, int overlay=1, PyObject *matrix=NULL, int xref=0, PyObject *clip = NULL, struct Graftmap *graftmap = NULL, char *_imgname = NULL) + { + pdf_obj *xobj1, *xobj2, *resources; + fz_buffer *res=NULL, *nres=NULL; + fz_rect cropbox = JM_rect_from_py(clip); + fz_matrix mat = JM_matrix_from_py(matrix); + int rc_xref = xref; + fz_try(gctx) { + pdf_page *tpage = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_obj *tpageref = tpage->obj; + pdf_document *pdfout = tpage->doc; // target PDF + + //------------------------------------------------------------- + // convert the source page to a Form XObject + //------------------------------------------------------------- + xobj1 = JM_xobject_from_page(gctx, pdfout, (fz_page *) fz_srcpage, + xref, (pdf_graft_map *) graftmap); + if (!rc_xref) rc_xref = pdf_to_num(gctx, xobj1); + + //------------------------------------------------------------- + // create referencing XObject (controls display on target page) + //------------------------------------------------------------- + // fill reference to xobj1 into the /Resources + //------------------------------------------------------------- + pdf_obj *subres1 = pdf_new_dict(gctx, pdfout, 5); + pdf_dict_puts(gctx, subres1, "fullpage", xobj1); + pdf_obj *subres = pdf_new_dict(gctx, pdfout, 5); + pdf_dict_put_drop(gctx, subres, PDF_NAME(XObject), subres1); + + res = fz_new_buffer(gctx, 20); + fz_append_string(gctx, res, "/fullpage Do"); + + xobj2 = pdf_new_xobject(gctx, pdfout, cropbox, mat, subres, res); + + pdf_drop_obj(gctx, subres); + fz_drop_buffer(gctx, res); + + //------------------------------------------------------------- + // update target page with xobj2: + //------------------------------------------------------------- + // 1. insert Xobject in Resources + //------------------------------------------------------------- + resources = pdf_dict_get_inheritable(gctx, tpageref, PDF_NAME(Resources)); + subres = pdf_dict_get(gctx, resources, PDF_NAME(XObject)); + if (!subres) { + subres = pdf_new_dict(gctx, pdfout, 10); + pdf_dict_putl(gctx, tpageref, subres, PDF_NAME(Resources), PDF_NAME(XObject), NULL); + } + + pdf_dict_puts(gctx, subres, _imgname, xobj2); + + //------------------------------------------------------------- + // 2. make and insert new Contents object + //------------------------------------------------------------- + nres = fz_new_buffer(gctx, 50); // buffer for Do-command + fz_append_string(gctx, nres, " q /"); // Do-command + fz_append_string(gctx, nres, _imgname); + fz_append_string(gctx, nres, " Do Q "); + + JM_insert_contents(gctx, pdfout, tpageref, nres, overlay); + fz_drop_buffer(gctx, nres); + } + fz_catch(gctx) { + return NULL; + } + return Py_BuildValue("i", rc_xref); + } + + //--------------------------------------------------------------------- + // insert an image + //--------------------------------------------------------------------- + FITZEXCEPTION(_insertImage, !result) + PyObject *_insertImage(const char *filename=NULL, struct Pixmap *pixmap=NULL, PyObject *stream=NULL, int overlay=1, PyObject *matrix=NULL, + const char *_imgname=NULL, PyObject *_imgpointer=NULL) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_document *pdf; + fz_pixmap *pm = NULL; + fz_pixmap *pix = NULL; + fz_image *mask = NULL; + fz_separations *seps = NULL; + pdf_obj *resources, *xobject, *ref; + fz_buffer *nres = NULL, *imgbuf = NULL; + fz_matrix mat = JM_matrix_from_py(matrix); // pre-calculated + + const char *template = " q %g %g %g %g %g %g cm /%s Do Q "; + fz_image *zimg = NULL, *image = NULL; + fz_try(gctx) { + //------------------------------------------------------------- + // create the image + //------------------------------------------------------------- + if (filename || EXISTS(stream) || EXISTS(_imgpointer)) + { + if (filename) { + image = fz_new_image_from_file(gctx, filename); + } else if (EXISTS(stream)) { + imgbuf = JM_BufferFromBytes(gctx, stream); + image = fz_new_image_from_buffer(gctx, imgbuf); + } else { // fz_image pointer has been handed in + image = (fz_image *)PyLong_AsVoidPtr(_imgpointer); + } + + // test for alpha (which would require making an SMask) + pix = fz_get_pixmap_from_image(gctx, image, NULL, NULL, 0, 0); + int xres, yres; + fz_image_resolution(image, &xres, &yres); + pix->xres = xres; + pix->yres = yres; + if (pix->alpha == 1) { // have alpha: create an SMask + pm = fz_convert_pixmap(gctx, pix, NULL, NULL, NULL, fz_default_color_params, 1); + pm->alpha = 0; + pm->colorspace = fz_keep_colorspace(gctx, fz_device_gray(gctx)); + mask = fz_new_image_from_pixmap(gctx, pm, NULL); + zimg = fz_new_image_from_pixmap(gctx, pix, mask); + fz_drop_image(gctx, image); + image = zimg; + zimg = NULL; + } + } else { // pixmap specified + fz_pixmap *arg_pix = (fz_pixmap *) pixmap; + if (arg_pix->alpha == 0) { + image = fz_new_image_from_pixmap(gctx, arg_pix, NULL); + } else { // pixmap has alpha: create an SMask + pm = fz_convert_pixmap(gctx, arg_pix, NULL, NULL, NULL, fz_default_color_params, 1); + pm->alpha = 0; + pm->colorspace = fz_keep_colorspace(gctx, fz_device_gray(gctx)); + mask = fz_new_image_from_pixmap(gctx, pm, NULL); + image = fz_new_image_from_pixmap(gctx, arg_pix, mask); + } + } + + //------------------------------------------------------------- + // image created - now put it in the PDF + //------------------------------------------------------------- + pdf = page->doc; // owning PDF + + // get /Resources, /XObject + resources = pdf_dict_get_inheritable(gctx, page->obj, PDF_NAME(Resources)); + xobject = pdf_dict_get(gctx, resources, PDF_NAME(XObject)); + if (!xobject) { // has no XObject yet, create one + xobject = pdf_new_dict(gctx, pdf, 10); + pdf_dict_putl_drop(gctx, page->obj, xobject, PDF_NAME(Resources), PDF_NAME(XObject), NULL); + } + + ref = pdf_add_image(gctx, pdf, image); + pdf_dict_puts(gctx, xobject, _imgname, ref); // update XObject + + // make contents stream that invokes the image + nres = fz_new_buffer(gctx, 50); + fz_append_printf(gctx, nres, template, + mat.a, mat.b, mat.c, mat.d, mat.e, mat.f, + _imgname); + JM_insert_contents(gctx, pdf, page->obj, nres, overlay); + fz_drop_buffer(gctx, nres); + } + fz_always(gctx) { + fz_drop_image(gctx, image); + fz_drop_image(gctx, mask); + fz_drop_pixmap(gctx, pix); + fz_drop_pixmap(gctx, pm); + fz_drop_buffer(gctx, imgbuf); + } + fz_catch(gctx) { + return NULL; + } + pdf->dirty = 1; + return_none; + } + + //--------------------------------------------------------------------- + // Page.refresh() + //--------------------------------------------------------------------- + FITZEXCEPTION(refresh, !result) + PARENTCHECK(refresh, """Refresh page after link/annot/widget updates.""") + PyObject *refresh() + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + if (!page) return_none; + fz_try(gctx) { + JM_refresh_link_table(gctx, page); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + + //--------------------------------------------------------------------- + // insert font + //--------------------------------------------------------------------- + %pythoncode +%{ +def insertFont(self, fontname="helv", fontfile=None, fontbuffer=None, + set_simple=False, wmode=0, encoding=0): + doc = self.parent + if doc is None: + raise ValueError("orphaned object: parent is None") + idx = 0 + + if fontname.startswith("/"): + fontname = fontname[1:] + + font = CheckFont(self, fontname) + if font is not None: # font already in font list of page + xref = font[0] # this is the xref + if CheckFontInfo(doc, xref): # also in our document font list? + return xref # yes: we are done + # need to build the doc FontInfo entry - done via getCharWidths + doc.getCharWidths(xref) + return xref + + #-------------------------------------------------------------------------- + # the font is not present for this page + #-------------------------------------------------------------------------- + + bfname = Base14_fontdict.get(fontname.lower(), None) # BaseFont if Base-14 font + + serif = 0 + CJK_number = -1 + CJK_list_n = ["china-t", "china-s", "japan", "korea"] + CJK_list_s = ["china-ts", "china-ss", "japan-s", "korea-s"] + + try: + CJK_number = CJK_list_n.index(fontname) + serif = 0 + except: + pass + + if CJK_number < 0: + try: + CJK_number = CJK_list_s.index(fontname) + serif = 1 + except: + pass + + # install the font for the page + val = self._insertFont(fontname, bfname, fontfile, fontbuffer, set_simple, idx, + wmode, serif, encoding, CJK_number) + + if not val: # did not work, error return + return val + + xref = val[0] # xref of installed font + + if CheckFontInfo(doc, xref): # check again: document already has this font + return xref # we are done + + # need to create document font info + doc.getCharWidths(xref) + return xref + +%} + + FITZEXCEPTION(_insertFont, !result) + PyObject *_insertFont(char *fontname, char *bfname, + char *fontfile, + PyObject *fontbuffer, + int set_simple, int idx, + int wmode, int serif, + int encoding, int ordering) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_document *pdf; + pdf_obj *resources, *fonts, *font_obj; + fz_font *font = NULL; + fz_buffer *res = NULL; + const unsigned char *data = NULL; + int size, ixref = 0, index = 0, simple = 0; + PyObject *value; + PyObject *exto = NULL; + fz_try(gctx) { + ASSERT_PDF(page); + pdf = page->doc; + // get the objects /Resources, /Resources/Font + resources = pdf_dict_get_inheritable(gctx, page->obj, PDF_NAME(Resources)); + fonts = pdf_dict_get(gctx, resources, PDF_NAME(Font)); + if (!fonts) { // page has no fonts yet + fonts = pdf_new_dict(gctx, pdf, 10); + pdf_dict_putl_drop(gctx, page->obj, fonts, PDF_NAME(Resources), PDF_NAME(Font), NULL); + } + + //------------------------------------------------------------- + // check for CJK font + //------------------------------------------------------------- + if (ordering > -1) data = fz_lookup_cjk_font(gctx, ordering, &size, &index); + if (data) { + font = fz_new_font_from_memory(gctx, NULL, data, size, index, 0); + font_obj = pdf_add_cjk_font(gctx, pdf, font, ordering, wmode, serif); + exto = JM_UnicodeFromStr("n/a"); + simple = 0; + goto weiter; + } + + //------------------------------------------------------------- + // check for PDF Base-14 font + //------------------------------------------------------------- + if (bfname) data = fz_lookup_base14_font(gctx, bfname, &size); + if (data) { + font = fz_new_font_from_memory(gctx, bfname, data, size, 0, 0); + font_obj = pdf_add_simple_font(gctx, pdf, font, encoding); + exto = JM_UnicodeFromStr("n/a"); + simple = 1; + goto weiter; + } + + if (fontfile) { + font = fz_new_font_from_file(gctx, NULL, fontfile, idx, 0); + } else { + res = JM_BufferFromBytes(gctx, fontbuffer); + if (!res) THROWMSG("need one of fontfile, fontbuffer"); + font = fz_new_font_from_buffer(gctx, NULL, res, idx, 0); + } + + if (!set_simple) { + font_obj = pdf_add_cid_font(gctx, pdf, font); + simple = 0; + } else { + font_obj = pdf_add_simple_font(gctx, pdf, font, encoding); + simple = 2; + } + + weiter: ; + ixref = pdf_to_num(gctx, font_obj); + + PyObject *name = JM_EscapeStrFromStr(pdf_to_name(gctx, + pdf_dict_get(gctx, font_obj, PDF_NAME(BaseFont)))); + + PyObject *subt = JM_UnicodeFromStr(pdf_to_name(gctx, + pdf_dict_get(gctx, font_obj, PDF_NAME(Subtype)))); + + if (!exto) + exto = JM_UnicodeFromStr(JM_get_fontextension(gctx, pdf, ixref)); + + value = Py_BuildValue("[i, {s:O, s:O, s:O, s:O, s:i}]", + ixref, + "name", name, // base font name + "type", subt, // subtype + "ext", exto, // file extension + "simple", JM_BOOL(simple), // simple font? + "ordering", ordering); // CJK font? + Py_CLEAR(exto); + Py_CLEAR(name); + Py_CLEAR(subt); + + // store font in resources and fonts objects will contain named reference to font + pdf_dict_puts_drop(gctx, fonts, fontname, font_obj); + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + fz_drop_font(gctx, font); + } + fz_catch(gctx) { + return NULL; + } + pdf->dirty = 1; + return value; + } + + //--------------------------------------------------------------------- + // Get page transformation matrix + //--------------------------------------------------------------------- + %pythoncode %{@property%} + PARENTCHECK(transformationMatrix, """Page transformation matrix.""") + %pythonappend transformationMatrix %{ + if self.rotation % 360 == 0: + val = Matrix(val) + else: + val = Matrix(1, 0, 0, -1, 0, self.CropBox.height) + %} + PyObject *transformationMatrix() + { + fz_matrix ctm = fz_identity; + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + if (!page) return JM_py_from_matrix(ctm); + fz_try(gctx) { + pdf_page_transform(gctx, page, NULL, &ctm); + } + fz_catch(gctx) {;} + return JM_py_from_matrix(ctm); + } + + //--------------------------------------------------------------------- + // Page Get list of contents objects + //--------------------------------------------------------------------- + FITZEXCEPTION(_getContents, !result) + PARENTCHECK(_getContents, """Get xref list of /Contents objects.""") + PyObject *_getContents() + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + PyObject *list = NULL; + pdf_obj *contents = NULL, *icont = NULL; + int i, xref; + size_t n = 0; + fz_try(gctx) { + ASSERT_PDF(page); + contents = pdf_dict_get(gctx, page->obj, PDF_NAME(Contents)); + if (pdf_is_array(gctx, contents)) { + n = pdf_array_len(gctx, contents); + list = PyList_New(n); + for (i = 0; i < n; i++) { + icont = pdf_array_get(gctx, contents, i); + xref = pdf_to_num(gctx, icont); + PyList_SET_ITEM(list, i, Py_BuildValue("i", xref)); + } + } + else if (contents) { + list = PyList_New(1); + xref = pdf_to_num(gctx, contents); + PyList_SET_ITEM(list, 0, Py_BuildValue("i", xref)); + } + } + fz_catch(gctx) { + return NULL; + } + if (list) { + return list; + } + return PyList_New(0); + } + + //--------------------------------------------------------------------- + // Set given object as the /Contents of a page + //--------------------------------------------------------------------- + FITZEXCEPTION(_setContents, !result) + PARENTCHECK(_setContents, """Set bytes as the (only) /Contents object.""") + PyObject *_setContents(int xref = 0) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) $self); + pdf_obj *contents = NULL; + + fz_try(gctx) { + ASSERT_PDF(page); + + if (!INRANGE(xref, 1, pdf_xref_len(gctx, page->doc) - 1)) + THROWMSG("xref out of range"); + + contents = pdf_new_indirect(gctx, page->doc, xref, 0); + if (!pdf_is_stream(gctx, contents)) + THROWMSG("xref is not a stream"); + + pdf_dict_put_drop(gctx, page->obj, PDF_NAME(Contents), contents); + } + fz_catch(gctx) { + return NULL; + } + page->doc->dirty = 1; + return_none; + } + + %pythoncode %{ + @property + def _isWrapped(self): + """Check if /Contents is wrapped in string pair "q" / "Q". + """ + cont = self.readContents().split() + if len(cont) < 1 or cont[0] != b"q" or cont[-1] != "Q": + return False + return True + + def _wrapContents(self): + TOOLS._insert_contents(self, b"q\n", False) + TOOLS._insert_contents(self, b"\nQ", True) + + wrapContents = _wrapContents + + + def links(self, kinds=None): + """ Generator over the links of a page. + + Args: + kinds: (tuple) link kinds to subselect from. If none, + all links are returned. E.g. kinds=(LINK_URI,) + will only yield URI links. + """ + all_links = self.getLinks() + for link in all_links: + if kinds is None or link["kind"] in kinds: + yield (link) + + + def annots(self, types=None): + """ Generator over the annotations of a page. + + Args: + types: (tuple) annotation types to subselect from. If none, + all annotations are returned. E.g. types=(PDF_ANNOT_LINE,) + will only yield line annotations. + """ + annot = self.firstAnnot + while annot: + if types is None or annot.type[0] in types: + yield (annot) + annot = annot.next + + + def widgets(self, types=None): + """ Generator over the widgets of a page. + + Args: + types: (tuple) field types to subselect from. If none, + all fields are returned. E.g. types=(PDF_WIDGET_TYPE_TEXT,) + will only yield text fields. + """ + widget = self.firstWidget + while widget: + if types is None or widget.field_type in types: + yield (widget) + widget = widget.next + + + def __str__(self): + CheckParent(self) + x = self.parent.name + if self.parent.stream is not None: + x = "" % (self.parent._graft_id,) + if x == "": + x = "" % self.parent._graft_id + return "page %s of %s" % (self.number, x) + + def __repr__(self): + CheckParent(self) + x = self.parent.name + if self.parent.stream is not None: + x = "" % (self.parent._graft_id,) + if x == "": + x = "" % self.parent._graft_id + return "page %s of %s" % (self.number, x) + + def _forget_annot(self, annot): + """Remove an annot from reference dictionary.""" + aid = id(annot) + if aid in self._annot_refs: + self._annot_refs[aid] = None + + def _reset_annot_refs(self): + """Invalidate / delete all annots of this page.""" + for annot in self._annot_refs.values(): + if annot: + annot._erase() + self._annot_refs.clear() + + @property + def xref(self): + """PDF xref number of page.""" + CheckParent(self) + return self.parent._getPageXref(self.number)[0] + + def _erase(self): + self._reset_annot_refs() + try: + self.parent._forget_page(self) + except: + pass + if getattr(self, "thisown", False): + self.__swig_destroy__(self) + self.parent = None + self.thisown = False + self.number = None + + def __del__(self): + self._erase() + + def getFontList(self, full=False): + """List of fonts defined in the page object.""" + CheckParent(self) + return self.parent.getPageFontList(self.number, full=full) + + def getImageList(self, full=False): + """List of images defined in the page object.""" + CheckParent(self) + return self.parent.getPageImageList(self.number, full=full) + + + def readContents(self): + """All /Contents streams concatenated in one bytes object.""" + return TOOLS._get_all_contents(self) + + + @property + def MediaBoxSize(self): + return Point(self.MediaBox.width, self.MediaBox.height) + + def cleanContents(self): + self._cleanContents() + + getContents = _getContents + %} + } +}; +%clearnodefaultctor; + +//----------------------------------------------------------------------------- +// Pixmap +//----------------------------------------------------------------------------- +struct Pixmap +{ + %extend { + ~Pixmap() { + DEBUGMSG1("Pixmap"); + fz_pixmap *this_pix = (fz_pixmap *) $self; + fz_drop_pixmap(gctx, this_pix); + DEBUGMSG2; + } + FITZEXCEPTION(Pixmap, !result) + %pythonprepend Pixmap +%{"""Pixmap(colorspace, irect, alpha) - empty pixmap. +Pixmap(colorspace, src) - copy changing colorspace. +Pixmap(src, width, height,[clip]) - scaled copy, float dimensions. +Pixmap(src, alpha=1) - copy and add or drop alpha channel. +Pixmap(filename) - from an image in a file. +Pixmap(image) - from an image in memory (bytes). +Pixmap(colorspace, width, height, samples, alpha) - from samples data. +Pixmap(PDFdoc, xref) - from an image at xref in a PDF document. +"""%} + //--------------------------------------------------------------------- + // create empty pixmap with colorspace and IRect + //--------------------------------------------------------------------- + Pixmap(struct Colorspace *cs, PyObject *bbox, int alpha = 0) + { + fz_pixmap *pm = NULL; + fz_try(gctx) { + pm = fz_new_pixmap_with_bbox(gctx, (fz_colorspace *) cs, JM_irect_from_py(bbox), NULL, alpha); + } + fz_catch(gctx) { + return NULL; + } + return (struct Pixmap *) pm; + } + + //--------------------------------------------------------------------- + // copy pixmap, converting colorspace + // New in v1.11: option to remove alpha + // Changed in v1.13: alpha = 0 does not work since at least v1.12 + //--------------------------------------------------------------------- + Pixmap(struct Colorspace *cs, struct Pixmap *spix) + { + fz_pixmap *pm = NULL; + fz_try(gctx) { + if (!fz_pixmap_colorspace(gctx, (fz_pixmap *) spix)) + THROWMSG("cannot copy pixmap with NULL colorspace"); + pm = fz_convert_pixmap(gctx, (fz_pixmap *) spix, (fz_colorspace *) cs, NULL, NULL, fz_default_color_params, 1); + } + fz_catch(gctx) { + return NULL; + } + return (struct Pixmap *) pm; + } + + + //--------------------------------------------------------------------- + // create pixmap as scaled copy of another one + //--------------------------------------------------------------------- + Pixmap(struct Pixmap *spix, float w, float h, PyObject *clip=NULL) + { + fz_pixmap *pm = NULL; + fz_pixmap *src_pix = (fz_pixmap *) spix; + fz_try(gctx) { + fz_irect bbox = JM_irect_from_py(clip); + if (!fz_is_infinite_irect(bbox)) { + pm = fz_scale_pixmap(gctx, src_pix, src_pix->x, src_pix->y, w, h, &bbox); + } else { + pm = fz_scale_pixmap(gctx, src_pix, src_pix->x, src_pix->y, w, h, NULL); + } + } + fz_catch(gctx) { + return NULL; + } + return (struct Pixmap *) pm; + } + + + //--------------------------------------------------------------------- + // copy pixmap & add / drop the alpha channel + //--------------------------------------------------------------------- + Pixmap(struct Pixmap *spix, int alpha=1) + { + fz_pixmap *pm = NULL, *src_pix = (fz_pixmap *) spix; + int n, w, h, i; + fz_separations *seps = NULL; + fz_try(gctx) { + if (!INRANGE(alpha, 0, 1)) + THROWMSG("illegal alpha value"); + fz_colorspace *cs = fz_pixmap_colorspace(gctx, src_pix); + if (!cs && !alpha) + THROWMSG("cannot drop alpha for 'NULL' colorspace"); + n = fz_pixmap_colorants(gctx, src_pix); + w = fz_pixmap_width(gctx, src_pix); + h = fz_pixmap_height(gctx, src_pix); + pm = fz_new_pixmap(gctx, cs, w, h, seps, alpha); + pm->x = src_pix->x; + pm->y = src_pix->y; + pm->xres = src_pix->xres; + pm->yres = src_pix->yres; + + // copy samples data ------------------------------------------ + unsigned char *sptr = src_pix->samples; + unsigned char *tptr = pm->samples; + if (src_pix->alpha == pm->alpha) { // identical samples + memcpy(tptr, sptr, w * h * (n + alpha)); + } else { + for (i = 0; i < w * h; i++) { + memcpy(tptr, sptr, n); + tptr += n; + if (pm->alpha) { + tptr[0] = 255; + tptr++; + } + sptr += n + src_pix->alpha; + } + } + } + fz_catch(gctx) { + return NULL; + } + return (struct Pixmap *) pm; + } + + //--------------------------------------------------------------------- + // create pixmap from samples data + //--------------------------------------------------------------------- + Pixmap(struct Colorspace *cs, int w, int h, PyObject *samples, int alpha=0) + { + int n = fz_colorspace_n(gctx, (fz_colorspace *) cs); + int stride = (n + alpha)*w; + fz_separations *seps = NULL; + fz_buffer *res = NULL; + fz_pixmap *pm = NULL; + fz_try(gctx) { + size_t size = 0; + unsigned char *c = NULL; + res = JM_BufferFromBytes(gctx, samples); + if (!res) THROWMSG("bad samples data"); + size = fz_buffer_storage(gctx, res, &c); + if (stride * h != size) THROWMSG("bad samples length"); + pm = fz_new_pixmap(gctx, (fz_colorspace *) cs, w, h, seps, alpha); + memcpy(pm->samples, c, size); + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + } + fz_catch(gctx) { + return NULL; + } + return (struct Pixmap *) pm; + } + + //--------------------------------------------------------------------- + // create pixmap from filename + //--------------------------------------------------------------------- + Pixmap(char *filename) + { + fz_image *img = NULL; + fz_pixmap *pm = NULL; + fz_try(gctx) { + img = fz_new_image_from_file(gctx, filename); + pm = fz_get_pixmap_from_image(gctx, img, NULL, NULL, NULL, NULL); + int xres, yres; + fz_image_resolution(img, &xres, &yres); + pm->xres = xres; + pm->yres = yres; + } + fz_always(gctx) { + fz_drop_image(gctx, img); + } + fz_catch(gctx) { + return NULL; + } + return (struct Pixmap *) pm; + } + + //--------------------------------------------------------------------- + // create pixmap from in-memory image + //--------------------------------------------------------------------- + Pixmap(PyObject *imagedata) + { + fz_buffer *res = NULL; + fz_image *img = NULL; + fz_pixmap *pm = NULL; + fz_try(gctx) { + res = JM_BufferFromBytes(gctx, imagedata); + if (!res) THROWMSG("bad image data"); + img = fz_new_image_from_buffer(gctx, res); + pm = fz_get_pixmap_from_image(gctx, img, NULL, NULL, NULL, NULL); + int xres, yres; + fz_image_resolution(img, &xres, &yres); + pm->xres = xres; + pm->yres = yres; + } + fz_always(gctx) { + fz_drop_image(gctx, img); + fz_drop_buffer(gctx, res); + } + fz_catch(gctx) { + return NULL; + } + return (struct Pixmap *) pm; + } + + + //--------------------------------------------------------------------- + // Create pixmap from PDF image identified by XREF number + //--------------------------------------------------------------------- + Pixmap(struct Document *doc, int xref) + { + fz_image *img = NULL; + fz_pixmap *pix = NULL; + pdf_obj *ref = NULL; + pdf_obj *type; + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) doc); + fz_try(gctx) { + ASSERT_PDF(pdf); + int xreflen = pdf_xref_len(gctx, pdf); + if (!INRANGE(xref, 1, xreflen-1)) + THROWMSG("xref out of range"); + ref = pdf_new_indirect(gctx, pdf, xref, 0); + type = pdf_dict_get(gctx, ref, PDF_NAME(Subtype)); + if (!pdf_name_eq(gctx, type, PDF_NAME(Image))) + THROWMSG("xref not an image"); + img = pdf_load_image(gctx, pdf, ref); + pix = fz_get_pixmap_from_image(gctx, img, NULL, NULL, NULL, NULL); + } + fz_always(gctx) { + fz_drop_image(gctx, img); + pdf_drop_obj(gctx, ref); + } + fz_catch(gctx) { + fz_drop_pixmap(gctx, pix); + return NULL; + } + return (struct Pixmap *) pix; + } + + + //--------------------------------------------------------------------- + // shrink + //--------------------------------------------------------------------- + %pythonprepend shrink +%{"""Divide width and height by 2**factor. +E.g. factor=1 shrinks to 25% of original size (in place)."""%} + void shrink(int factor) + { + if (factor < 1) + { + JM_Warning("ignoring shrink factor < 1"); + return; + } + fz_subsample_pixmap(gctx, (fz_pixmap *) $self, factor); + } + + //--------------------------------------------------------------------- + // apply gamma correction + //--------------------------------------------------------------------- + %pythonprepend gammaWith +%{"""Apply correction with some float. +gamma=1 is a no-op."""} + void gammaWith(float gamma) + { + if (!fz_pixmap_colorspace(gctx, (fz_pixmap *) $self)) + { + JM_Warning("colorspace invalid for function"); + return; + } + fz_gamma_pixmap(gctx, (fz_pixmap *) $self, gamma); + } + + //--------------------------------------------------------------------- + // tint pixmap with color + //--------------------------------------------------------------------- + %pythonprepend tintWith +%{"""Tint colors with modifiers for black and white.""" + +if not self.colorspace or self.colorspace.n > 3: + print("warning: colorspace invalid for function") + return%} + void tintWith(int black, int white) + { + fz_tint_pixmap(gctx, (fz_pixmap *) $self, black, white); + } + + //---------------------------------------------------------------------- + // clear all of pixmap samples to 0x00 */ + //---------------------------------------------------------------------- + %pythonprepend clearWith + %{"""Fill all color components with same value."""%} + void clearWith() + { + fz_clear_pixmap(gctx, (fz_pixmap *) $self); + } + + //---------------------------------------------------------------------- + // clear total pixmap with value */ + //---------------------------------------------------------------------- + void clearWith(int value) + { + fz_clear_pixmap_with_value(gctx, (fz_pixmap *) $self, value); + } + + //---------------------------------------------------------------------- + // clear pixmap rectangle with value + //---------------------------------------------------------------------- + void clearWith(int value, PyObject *bbox) + { + JM_clear_pixmap_rect_with_value(gctx, (fz_pixmap *) $self, value, JM_irect_from_py(bbox)); + } + + //---------------------------------------------------------------------- + // copy pixmaps + //---------------------------------------------------------------------- + FITZEXCEPTION(copyPixmap, !result) + %pythonprepend copyPixmap %{"""Copy bbox from another Pixmap."""%} + PyObject *copyPixmap(struct Pixmap *src, PyObject *bbox) + { + fz_try(gctx) { + fz_pixmap *pm = (fz_pixmap *) $self, *src_pix = (fz_pixmap *) src; + if (!fz_pixmap_colorspace(gctx, src_pix)) + THROWMSG("cannot copy pixmap with NULL colorspace"); + if (pm->alpha != src_pix->alpha) + THROWMSG("source and target alpha must be equal"); + fz_copy_pixmap_rect(gctx, pm, src_pix, JM_irect_from_py(bbox), NULL); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + //---------------------------------------------------------------------- + // set alpha values + //---------------------------------------------------------------------- + FITZEXCEPTION(setAlpha, !result) + %pythonprepend setAlpha +%{"""Set alphas to values contained in a byte array. +If omitted, set alphas to 255."""%} + PyObject *setAlpha(PyObject *alphavalues=NULL) + { + fz_buffer *res = NULL; + fz_pixmap *pix = (fz_pixmap *) $self; + fz_try(gctx) { + if (pix->alpha == 0) THROWMSG("pixmap has no alpha"); + int n = fz_pixmap_colorants(gctx, pix); + int w = fz_pixmap_width(gctx, pix); + int h = fz_pixmap_height(gctx, pix); + int balen = w * h * (n+1); + unsigned char *data = NULL; + int data_len = 0; + if (alphavalues) { + res = JM_BufferFromBytes(gctx, alphavalues); + if (res) { + data_len = (int) fz_buffer_storage(gctx, res, &data); + if (data && data_len < w * h) + THROWMSG("not enough alpha values"); + } + else THROWMSG("bad type: 'alphavalues'"); + } + int i = 0, k = 0; + while (i < balen) { + if (data_len) pix->samples[i+n] = data[k]; + else pix->samples[i+n] = 255; + i += n+1; + k += 1; + } + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + //---------------------------------------------------------------------- + // Pixmap._getImageData + //---------------------------------------------------------------------- + FITZEXCEPTION(_getImageData, !result) + PyObject *_getImageData(int format) + { + fz_output *out = NULL; + fz_buffer *res = NULL; + PyObject *barray = NULL; + fz_pixmap *pm = (fz_pixmap *) $self; + fz_try(gctx) { + size_t size = fz_pixmap_stride(gctx, pm) * pm->h; + res = fz_new_buffer(gctx, size); + out = fz_new_output_with_buffer(gctx, res); + + switch(format) { + case(1): + fz_write_pixmap_as_png(gctx, out, pm); + break; + case(2): + fz_write_pixmap_as_pnm(gctx, out, pm); + break; + case(3): + fz_write_pixmap_as_pam(gctx, out, pm); + break; + case(5): // Adobe Photoshop Document + fz_write_pixmap_as_psd(gctx, out, pm); + break; + case(6): // Postscript format + fz_write_pixmap_as_ps(gctx, out, pm); + break; + default: + fz_write_pixmap_as_png(gctx, out, pm); + break; + } + barray = JM_BinFromBuffer(gctx, res); + } + fz_always(gctx) { + fz_drop_output(gctx, out); + fz_drop_buffer(gctx, res); + } + + fz_catch(gctx) { + return NULL; + } + return barray; + } + + %pythoncode %{ +def getImageData(self, output="png"): + """Convert to binary image stream of desired type. + + Can be used as input to GUI packages like tkinter. + + Args: + output: (str) image type, default is PNG. Others are PNM, PGM, PPM, + PBM, PAM, PSD, PS. + Returns: + Bytes object. + """ + valid_formats = {"png": 1, "pnm": 2, "pgm": 2, "ppm": 2, "pbm": 2, + "pam": 3, "tga": 4, "tpic": 4, + "psd": 5, "ps": 6} + idx = valid_formats.get(output.lower(), 1) + if self.alpha and idx in (2, 6): + raise ValueError("'%s' cannot have alpha" % output) + if self.colorspace and self.colorspace.n > 3 and idx in (1, 2, 4): + raise ValueError("unsupported colorspace for '%s'" % output) + barray = self._getImageData(idx) + return barray + +def getPNGdata(self): + """Wrapper for Pixmap.getImageData("png").""" + barray = self._getImageData(1) + return barray + +def getPNGData(self): + """Wrapper for Pixmap.getImageData("png").""" + barray = self._getImageData(1) + return barray + %} + + //---------------------------------------------------------------------- + // _writeIMG + //---------------------------------------------------------------------- + FITZEXCEPTION(_writeIMG, !result) + PyObject *_writeIMG(char *filename, int format) + { + fz_try(gctx) { + fz_pixmap *pm = (fz_pixmap *) $self; + switch(format) { + case(1): + fz_save_pixmap_as_png(gctx, pm, filename); + break; + case(2): + fz_save_pixmap_as_pnm(gctx, pm, filename); + break; + case(3): + fz_save_pixmap_as_pam(gctx, pm, filename); + break; + case(5): // Adobe Photoshop Document + fz_save_pixmap_as_psd(gctx, pm, filename); + break; + case(6): // Postscript + fz_save_pixmap_as_ps(gctx, pm, filename, 0); + break; + default: + fz_save_pixmap_as_png(gctx, pm, filename); + break; + } + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + %pythoncode %{ +def writeImage(self, filename, output=None): + """Output as image in format determined by filename extension. + + Args: + output: (str) only use to override filename extension. Default is PNG. + Others are PNM, PGM, PPM, PBM, PAM, PSD, PS. + Returns: + Bytes object. + """ + valid_formats = {"png": 1, "pnm": 2, "pgm": 2, "ppm": 2, "pbm": 2, + "pam": 3, "tga": 4, "tpic": 4, + "psd": 5, "ps": 6} + if output is None: + _, ext = os.path.splitext(filename) + output = ext[1:] + + idx = valid_formats.get(output.lower(), 1) + + if self.alpha and idx in (2, 6): + raise ValueError("'%s' cannot have alpha" % output) + if self.colorspace and self.colorspace.n > 3 and idx in (1, 2, 4): + raise ValueError("unsupported colorspace for '%s'" % output) + + return self._writeIMG(filename, idx) + +def writePNG(self, filename): + """Wrapper for Pixmap.writeImage(filename, "png").""" + return self._writeIMG(filename, 1) + + +def pillowWrite(self, *args, **kwargs): + """Write to image file using Pillow. + + Arguments are passed to Pillow's Image.save() method. + Use instead of writeImage when other output formats are desired. + """ + try: + from PIL import Image + except ImportError: + print("PIL/Pillow not instralled") + raise + + cspace = self.colorspace + if cspace is None: + mode = "L" + elif cspace.n == 1: + mode = "L" if self.alpha == 0 else "LA" + elif cspace.n == 3: + mode = "RGB" if self.alpha == 0 else "RGBA" + else: + mode = "CMYK" + + img = Image.frombytes(mode, (self.width, self.height), self.samples) + + if "dpi" not in kwargs.keys(): + kwargs["dpi"] = (self.xres, self.yres) + + img.save(*args, **kwargs) + +def pillowData(self, *args, **kwargs): + """Convert to binary image stream using pillow. + + Arguments are passed to Pillow's Image.save() method. + Use it instead of writeImage when other output formats are needed. + """ + from io import BytesIO + bytes_out = BytesIO() + self.pillowSave(bytes_out, *args, **kwargs) + return bytes_out.get_value() + + %} + //---------------------------------------------------------------------- + // invertIRect + //---------------------------------------------------------------------- + %pythonprepend invertIRect + %{"""Invert the colors inside a bbox."""%} + PyObject *invertIRect(PyObject *bbox = NULL) + { + fz_pixmap *pm = (fz_pixmap *) $self; + if (!fz_pixmap_colorspace(gctx, pm)) + { + JM_Warning("ignored for stencil pixmap"); + return JM_BOOL(0); + } + + fz_irect r = JM_irect_from_py(bbox); + if (fz_is_infinite_irect(r)) + r = fz_pixmap_bbox(gctx, pm); + + return JM_BOOL(JM_invert_pixmap_rect(gctx, pm, r)); + } + + //---------------------------------------------------------------------- + // get one pixel as a list + //---------------------------------------------------------------------- + FITZEXCEPTION(pixel, !result) + %pythonprepend pixel +%{"""Get color tuple of pixel (x, y). +Last item is the alpha if Pixmap.alpha is true."""%} + PyObject *pixel(int x, int y) + { + PyObject *p = NULL; + fz_try(gctx) { + fz_pixmap *pm = (fz_pixmap *) $self; + if (!INRANGE(x, 0, pm->w - 1) || !INRANGE(y, 0, pm->h - 1)) + THROWMSG("coordinates outside image"); + int n = pm->n; + int stride = fz_pixmap_stride(gctx, pm); + int j, i = stride * y + n * x; + p = PyTuple_New(n); + for (j = 0; j < n; j++) { + PyTuple_SET_ITEM(p, j, Py_BuildValue("i", pm->samples[i + j])); + } + } + fz_catch(gctx) { + return NULL; + } + return p; + } + + //---------------------------------------------------------------------- + // Set one pixel to a given color tuple + //---------------------------------------------------------------------- + FITZEXCEPTION(setPixel, !result) + %pythonprepend setPixel + %{"""Set color of pixel (x, y)."""%} + PyObject *setPixel(int x, int y, PyObject *color) + { + fz_try(gctx) { + fz_pixmap *pm = (fz_pixmap *) $self; + if (!INRANGE(x, 0, pm->w - 1) || !INRANGE(y, 0, pm->h - 1)) + THROWMSG("outside image"); + int n = pm->n; + if (!PySequence_Check(color) || PySequence_Size(color) != n) + THROWMSG("bad color arg"); + int i, j; + unsigned char c[5]; + for (j = 0; j < n; j++) { + i = (int) PyInt_AsLong(PySequence_ITEM(color, j)); + if (!INRANGE(i, 0, 255)) THROWMSG("bad pixel component"); + c[j] = (unsigned char) i; + } + int stride = fz_pixmap_stride(gctx, pm); + i = stride * y + n * x; + for (j = 0; j < n; j++) { + pm->samples[i + j] = c[j]; + } + } + fz_catch(gctx) { + PyErr_Clear(); + return NULL; + } + return_none; + } + + + //---------------------------------------------------------------------- + // Set Pixmap resolution + //---------------------------------------------------------------------- + %pythonprepend setResolution +%{"""Set resolution in both dimensions. + +Use pillowWrite to reflect this in output image."""%} + PyObject *setResolution(int xres, int yres) + { + fz_pixmap *pm = (fz_pixmap *) $self; + pm->xres = xres; + pm->yres = yres; + Py_RETURN_NONE; + } + + //---------------------------------------------------------------------- + // Set a rect to a given color tuple + //---------------------------------------------------------------------- + FITZEXCEPTION(setRect, !result) + %pythonprepend setRect + %{"""Set color of all pixels in bbox."""%} + PyObject *setRect(PyObject *bbox, PyObject *color) + { + PyObject *rc = NULL; + fz_try(gctx) { + fz_pixmap *pm = (fz_pixmap *) $self; + Py_ssize_t j, n = (Py_ssize_t) pm->n; + if (!PySequence_Check(color) || PySequence_Size(color) != n) + THROWMSG("bad color arg"); + unsigned char c[5]; + int i; + for (j = 0; j < n; j++) { + if (JM_INT_ITEM(color, j, &i) == 1) + THROWMSG("bad color component"); + if (!INRANGE(i, 0, 255)) + THROWMSG("bad color component"); + c[j] = (unsigned char) i; + } + i = JM_fill_pixmap_rect_with_color(gctx, pm, c, JM_irect_from_py(bbox)); + rc = JM_BOOL(i); + } + fz_catch(gctx) { + PyErr_Clear(); + return NULL; + } + return rc; + } + + //---------------------------------------------------------------------- + // get length of one image row + //---------------------------------------------------------------------- + %pythoncode %{@property%} + %pythonprepend stride %{"""Length of one image line (width * n)."""%} + int stride() + { + return fz_pixmap_stride(gctx, (fz_pixmap *) $self); + } + + //---------------------------------------------------------------------- + // x, y, width, height, xres, yres, n + //---------------------------------------------------------------------- + %pythoncode %{@property%} + %pythonprepend xres %{"""Resolution in x direction."""%} + int xres() + { + fz_pixmap *this_pix = (fz_pixmap *) $self; + return this_pix->xres; + } + + %pythoncode %{@property%} + %pythonprepend yres %{"""Resolution in y direction."""%} + int yres() + { + fz_pixmap *this_pix = (fz_pixmap *) $self; + return this_pix->yres; + } + + %pythoncode %{@property%} + %pythonprepend w %{"""The width."""%} + int w() + { + return fz_pixmap_width(gctx, (fz_pixmap *) $self); + } + + %pythoncode %{@property%} + %pythonprepend h %{"""The height."""%} + int h() + { + return fz_pixmap_height(gctx, (fz_pixmap *) $self); + } + + %pythoncode %{@property%} + %pythonprepend x %{"""x component of Pixmap origin."""%} + int x() + { + return fz_pixmap_x(gctx, (fz_pixmap *) $self); + } + + %pythoncode %{@property%} + %pythonprepend y %{"""y component of Pixmap origin."""%} + int y() + { + return fz_pixmap_y(gctx, (fz_pixmap *) $self); + } + + %pythoncode %{@property%} + %pythonprepend n %{"""The size of one pixel."""%} + int n() + { + return fz_pixmap_components(gctx, (fz_pixmap *) $self); + } + + //---------------------------------------------------------------------- + // check alpha channel + //---------------------------------------------------------------------- + %pythoncode %{@property%} + %pythonprepend alpha %{"""Indicates presence of alpha channel."""%} + int alpha() + { + return fz_pixmap_alpha(gctx, (fz_pixmap *) $self); + } + + //---------------------------------------------------------------------- + // get colorspace of pixmap + //---------------------------------------------------------------------- + %pythoncode %{@property%} + %pythonprepend colorspace %{"""Pixmap Colorspace."""%} + struct Colorspace *colorspace() + { + return (struct Colorspace *) fz_pixmap_colorspace(gctx, (fz_pixmap *) $self); + } + + //---------------------------------------------------------------------- + // return irect of pixmap + //---------------------------------------------------------------------- + %pythoncode %{@property%} + %pythonprepend irect %{"""Pixmap bbox - an IRect object."""%} + %pythonappend irect %{val = IRect(val)%} + PyObject *irect() + { + return JM_py_from_irect(fz_pixmap_bbox(gctx, (fz_pixmap *) $self)); + } + + //---------------------------------------------------------------------- + // return size of pixmap + //---------------------------------------------------------------------- + %pythoncode %{@property%} + %pythonprepend size %{"""Pixmap size."""%} + int size() + { + return (int) fz_pixmap_size(gctx, (fz_pixmap *) $self); + } + + //---------------------------------------------------------------------- + // samples + //---------------------------------------------------------------------- + %pythoncode %{@property%} + %pythonprepend samples %{"""The area of all pixels."""%} + PyObject *samples() + { + fz_pixmap *pm = (fz_pixmap *) $self; + return PyBytes_FromStringAndSize((const char *) pm->samples, (Py_ssize_t) (pm->w)*(pm->h)*(pm->n)); + } + + %pythoncode %{ + width = w + height = h + + def __len__(self): + return self.size + + def __repr__(self): + if not type(self) is Pixmap: return + if self.colorspace: + return "Pixmap(%s, %s, %s)" % (self.colorspace.name, self.irect, self.alpha) + else: + return "Pixmap(%s, %s, %s)" % ('None', self.irect, self.alpha) + + def __del__(self): + if not type(self) is Pixmap: return + self.__swig_destroy__(self) + %} + } +}; + +/* fz_colorspace */ +struct Colorspace +{ + %extend { + ~Colorspace() + { + DEBUGMSG1("Colorspace"); + fz_colorspace *this_cs = (fz_colorspace *) $self; + fz_drop_colorspace(gctx, this_cs); + DEBUGMSG2; + } + + %pythonprepend Colorspace + %{"""Supported are GRAY, RGB and CMYK."""%} + Colorspace(int type) + { + fz_colorspace *cs = NULL; + switch(type) { + case CS_GRAY: + cs = fz_device_gray(gctx); + break; + case CS_CMYK: + cs = fz_device_cmyk(gctx); + break; + case CS_RGB: + default: + cs = fz_device_rgb(gctx); + break; + } + return (struct Colorspace *) cs; + } + //---------------------------------------------------------------------- + // number of bytes to define color of one pixel + //---------------------------------------------------------------------- + %pythoncode %{@property%} + %pythonprepend n %{"""Size of one pixel."""%} + PyObject *n() + { + return Py_BuildValue("i", fz_colorspace_n(gctx, (fz_colorspace *) $self)); + } + + //---------------------------------------------------------------------- + // name of colorspace + //---------------------------------------------------------------------- + PyObject *_name() + { + return JM_UnicodeFromStr(fz_colorspace_name(gctx, (fz_colorspace *) $self)); + } + + %pythoncode %{ + @property + def name(self): + """Name of the Colorspace.""" + + if self.n == 1: + return csGRAY._name() + elif self.n == 3: + return csRGB._name() + elif self.n == 4: + return csCMYK._name() + return self._name() + + def __repr__(self): + x = ("", "GRAY", "", "RGB", "CMYK")[self.n] + return "Colorspace(CS_%s) - %s" % (x, self.name) + %} + } +}; + + +/* fz_device wrapper */ +%rename(Device) DeviceWrapper; +struct DeviceWrapper +{ + %extend { + FITZEXCEPTION(DeviceWrapper, !result) + DeviceWrapper(struct Pixmap *pm, PyObject *clip) { + struct DeviceWrapper *dw = NULL; + fz_try(gctx) { + dw = (struct DeviceWrapper *)calloc(1, sizeof(struct DeviceWrapper)); + fz_irect bbox = JM_irect_from_py(clip); + if (fz_is_infinite_irect(bbox)) + dw->device = fz_new_draw_device(gctx, fz_identity, (fz_pixmap *) pm); + else + dw->device = fz_new_draw_device_with_bbox(gctx, fz_identity, (fz_pixmap *) pm, &bbox); + } + fz_catch(gctx) { + return NULL; + } + return dw; + } + DeviceWrapper(struct DisplayList *dl) { + struct DeviceWrapper *dw = NULL; + fz_try(gctx) { + dw = (struct DeviceWrapper *)calloc(1, sizeof(struct DeviceWrapper)); + dw->device = fz_new_list_device(gctx, (fz_display_list *) dl); + dw->list = (fz_display_list *) dl; + fz_keep_display_list(gctx, (fz_display_list *) dl); + } + fz_catch(gctx) { + return NULL; + } + return dw; + } + DeviceWrapper(struct TextPage *tp, int flags = 0) { + struct DeviceWrapper *dw = NULL; + fz_try(gctx) { + dw = (struct DeviceWrapper *)calloc(1, sizeof(struct DeviceWrapper)); + fz_stext_options opts = { 0 }; + opts.flags = flags; + dw->device = fz_new_stext_device(gctx, (fz_stext_page *) tp, &opts); + } + fz_catch(gctx) { + return NULL; + } + return dw; + } + ~DeviceWrapper() { + fz_display_list *list = $self->list; + DEBUGMSG1("Device"); + fz_close_device(gctx, $self->device); + fz_drop_device(gctx, $self->device); + DEBUGMSG2; + if(list) + { + DEBUGMSG1("DisplayList after Device"); + fz_drop_display_list(gctx, list); + DEBUGMSG2; + } + } + } +}; + +//----------------------------------------------------------------------------- +// fz_outline +//----------------------------------------------------------------------------- +%nodefaultctor; +struct Outline { + %immutable; +/* + fz_outline doesn't keep a ref number in mupdf's code, + which means that if the root outline node is dropped, + all the outline nodes will also be destroyed. + + As a result, if the root Outline python object drops ref, + then other Outline will point to already freed area. E.g.: + >>> import fitz + >>> doc=fitz.Document('3.pdf') + >>> ol=doc.loadOutline() + >>> oln=ol.next + >>> oln.dest.page + 5 + >>> #drops root outline + ... + >>> ol=4 + free outline + >>> oln.dest.page + 0 + + I do not like to change struct of fz_document, so I decide + to delegate the outline destruction work to fz_document. That is, + when the Document is created, its outline is loaded in advance. + The outline will only be freed when the doc is destroyed, which means + in the python code, we must keep ref to doc if we still want to use outline + This is a nasty way but it requires little change to the mupdf code. + */ +/* + %extend { + ~Outline() + { + DEBUGMSG1("Outline"); + fz_outline *this_ol = (fz_outline *) $self; + fz_drop_outline(gctx, this_ol); + DEBUGMSG2; + } + } +*/ + %extend { + %pythoncode %{@property%} + PyObject *uri() + { + fz_outline *ol = (fz_outline *) $self; + return JM_UnicodeFromStr(ol->uri); + } + + %pythoncode %{@property%} + struct Outline *next() + { + fz_outline *ol = (fz_outline *) $self; + fz_outline *next_ol = ol->next; + if (!next_ol) return NULL; + next_ol = fz_keep_outline(gctx, next_ol); + return (struct Outline *) next_ol; + } + + %pythoncode %{@property%} + struct Outline *down() + { + fz_outline *ol = (fz_outline *) $self; + fz_outline *down_ol = ol->down; + if (!down_ol) return NULL; + down_ol = fz_keep_outline(gctx, down_ol); + return (struct Outline *) down_ol; + } + + %pythoncode %{@property%} + PyObject *isExternal() + { + fz_outline *ol = (fz_outline *) $self; + if (!ol->uri) Py_RETURN_FALSE; + return JM_BOOL(fz_is_external_link(gctx, ol->uri)); + } + + %pythoncode %{@property%} + int page() + { + fz_outline *ol = (fz_outline *) $self; + return ol->page; + } + + %pythoncode %{@property%} + float x() + { + fz_outline *ol = (fz_outline *) $self; + return ol->x; + } + + %pythoncode %{@property%} + float y() + { + fz_outline *ol = (fz_outline *) $self; + return ol->y; + } + + %pythoncode %{@property%} + PyObject *title() + { + fz_outline *ol = (fz_outline *) $self; + return JM_UnicodeFromStr(ol->title); + } + + %pythoncode %{@property%} + PyObject *is_open() + { + fz_outline *ol = (fz_outline *) $self; + return JM_BOOL(ol->is_open); + } + + %pythoncode %{isOpen = is_open%} + %pythoncode %{ + @property + def dest(self): + '''outline destination details''' + return linkDest(self, None) + %} + } +}; +%clearnodefaultctor; + + +//----------------------------------------------------------------------------- +// Annotation +//----------------------------------------------------------------------------- +%nodefaultctor; +struct Annot +{ + %extend + { + ~Annot() + { + DEBUGMSG1("Annot"); + pdf_drop_annot(gctx, (pdf_annot *) $self); + DEBUGMSG2; + } + //--------------------------------------------------------------------- + // annotation rectangle + //--------------------------------------------------------------------- + %pythoncode %{@property%} + PARENTCHECK(rect, """Annotation rectangle.""") + %pythonappend rect %{ + val = Rect(val) + val *= self.parent.derotationMatrix + %} + PyObject *rect() + { + fz_rect r = pdf_bound_annot(gctx, (pdf_annot *) $self); + return JM_py_from_rect(r); + } + + //--------------------------------------------------------------------- + // annotation get xref number + //--------------------------------------------------------------------- + PARENTCHECK(xref, """Annotation xref.""") + %pythoncode %{@property%} + PyObject *xref() + { + pdf_annot *annot = (pdf_annot *) $self; + return Py_BuildValue("i", pdf_to_num(gctx, annot->obj)); + } + + //--------------------------------------------------------------------- + // annotation get AP/N Matrix + //--------------------------------------------------------------------- + PARENTCHECK(APNMatrix, """Annotation appearance matrix.""") + %pythonappend APNMatrix %{val = Matrix(val)%} + %pythoncode %{@property%} + PyObject * + APNMatrix() + { + pdf_annot *annot = (pdf_annot *) $self; + pdf_obj *ap = pdf_dict_getl(gctx, annot->obj, PDF_NAME(AP), + PDF_NAME(N), NULL); + if (!ap) + return JM_py_from_matrix(fz_identity); + fz_matrix mat = pdf_dict_get_matrix(gctx, ap, PDF_NAME(Matrix)); + return JM_py_from_matrix(mat); + } + + //--------------------------------------------------------------------- + // annotation get AP/N BBox + //--------------------------------------------------------------------- + PARENTCHECK(APNBBox, """Annotation appearance bbox.""") + %pythonappend APNBBox %{ + val = Rect(val) * self.parent.transformationMatrix + val *= self.parent.derotationMatrix%} + %pythoncode %{@property%} + PyObject * + APNBBox() + { + pdf_annot *annot = (pdf_annot *) $self; + pdf_obj *ap = pdf_dict_getl(gctx, annot->obj, PDF_NAME(AP), + PDF_NAME(N), NULL); + if (!ap) + return JM_py_from_rect(fz_infinite_rect); + fz_rect rect = pdf_dict_get_rect(gctx, ap, PDF_NAME(BBox)); + return JM_py_from_rect(rect); + } + + + //--------------------------------------------------------------------- + // annotation set AP/N Matrix + //--------------------------------------------------------------------- + FITZEXCEPTION(setAPNMatrix, !result) + PARENTCHECK(setAPNMatrix, """Set annotation appearance matrix.""") + PyObject * + setAPNMatrix(PyObject *matrix) + { + pdf_annot *annot = (pdf_annot *) $self; + fz_try(gctx) { + pdf_obj *ap = pdf_dict_getl(gctx, annot->obj, PDF_NAME(AP), + PDF_NAME(N), NULL); + if (!ap) THROWMSG("annot has no appearance stream"); + fz_matrix mat = JM_matrix_from_py(matrix); + pdf_dict_put_matrix(gctx, ap, PDF_NAME(Matrix), mat); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + + //--------------------------------------------------------------------- + // annotation set AP/N BBox + //--------------------------------------------------------------------- + FITZEXCEPTION(setAPNBBox, !result) + %pythonprepend setAPNBBox %{ + """Set annotation appearance bbox.""" + + CheckParent(self) + page = self.parent + rot = page.rotationMatrix + mat = page.transformationMatrix + bbox *= rot * ~mat + %} + PyObject * + setAPNBBox(PyObject *bbox) + { + pdf_annot *annot = (pdf_annot *) $self; + fz_try(gctx) { + pdf_obj *ap = pdf_dict_getl(gctx, annot->obj, PDF_NAME(AP), + PDF_NAME(N), NULL); + if (!ap) THROWMSG("annot has no appearance stream"); + fz_rect rect = JM_rect_from_py(bbox); + pdf_dict_put_rect(gctx, ap, PDF_NAME(BBox), rect); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + + //--------------------------------------------------------------------- + // annotation show blend mode (/BM) + //--------------------------------------------------------------------- + PARENTCHECK(blendMode, """Annotation BlendMode.""") + PyObject *blendMode() + { + PyObject *blend_mode = NULL; + fz_try(gctx) { + pdf_annot *annot = (pdf_annot *) $self; + pdf_obj *obj, *obj1, *obj2; + obj = pdf_dict_get(gctx, annot->obj, PDF_NAME(BM)); + if (obj) { // check the annot object for /BM + blend_mode = JM_UnicodeFromStr(pdf_to_name(gctx, obj)); + goto fertig; + } + // loop through the /AP/N/Resources/ExtGState objects + obj = pdf_dict_getl(gctx, annot->obj, PDF_NAME(AP), + PDF_NAME(N), + PDF_NAME(Resources), + PDF_NAME(ExtGState), + NULL); + + if (pdf_is_dict(gctx, obj)) { + int i, j, m, n = pdf_dict_len(gctx, obj); + for (i = 0; i < n; i++) { + obj1 = pdf_dict_get_val(gctx, obj, i); + if (pdf_is_dict(gctx, obj1)) { + m = pdf_dict_len(gctx, obj1); + for (j = 0; j < m; j++) { + obj2 = pdf_dict_get_key(gctx, obj1, j); + if (pdf_objcmp(gctx, obj2, PDF_NAME(BM)) == 0) { + blend_mode = JM_UnicodeFromStr(pdf_to_name(gctx, pdf_dict_get_val(gctx, obj1, j))); + goto fertig; + } + } + } + } + } + fertig:; + } + fz_catch(gctx) { + return_none; + } + if (blend_mode) return blend_mode; + return_none; + } + + + //--------------------------------------------------------------------- + // annotation set blend mode (/BM) + //--------------------------------------------------------------------- + FITZEXCEPTION(setBlendMode, !result) + PARENTCHECK(setBlendMode, """Set annotation BlendMode.""") + PyObject *setBlendMode(char *blend_mode) + { + fz_try(gctx) { + pdf_annot *annot = (pdf_annot *) $self; + pdf_dict_put_name(gctx, annot->obj, PDF_NAME(BM), blend_mode); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + + %pythoncode%{@property%} + %pythonprepend language %{"""Annotation language."""%} + PyObject *language() + { + pdf_annot *this_annot = (pdf_annot *) $self; + fz_text_language lang = pdf_annot_language(gctx, this_annot); + char buf[8]; + if (lang == FZ_LANG_UNSET) return_none; + return Py_BuildValue("s", fz_string_from_text_language(buf, lang)); + } + + //--------------------------------------------------------------------- + // annotation set language (/Lang) + //--------------------------------------------------------------------- + FITZEXCEPTION(setLaguage, !result) + PARENTCHECK(setLaguage, """Set annotation language.""") + PyObject *setLaguage(char *language=NULL) + { + pdf_annot *this_annot = (pdf_annot *) $self; + fz_try(gctx) { + fz_text_language lang; + if (!language) + lang = FZ_LANG_UNSET; + else + lang = fz_text_language_from_string(language); + pdf_set_annot_language(gctx, this_annot, lang); + } + fz_catch(gctx) { + return NULL; + } + Py_RETURN_TRUE; + } + + + //--------------------------------------------------------------------- + // annotation get decompressed appearance stream source + //--------------------------------------------------------------------- + FITZEXCEPTION(_getAP, !result) + PyObject *_getAP() + { + PyObject *r = Py_None; + fz_buffer *res = NULL; + fz_try(gctx) { + pdf_annot *annot = (pdf_annot *) $self; + pdf_obj *ap = pdf_dict_getl(gctx, annot->obj, PDF_NAME(AP), + PDF_NAME(N), NULL); + + if (pdf_is_stream(gctx, ap)) res = pdf_load_stream(gctx, ap); + if (res) r = JM_BinFromBuffer(gctx, res); + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + } + fz_catch(gctx) { + return_none; + } + return r; + } + + //--------------------------------------------------------------------- + // annotation update /AP stream + //--------------------------------------------------------------------- + FITZEXCEPTION(_setAP, !result) + PyObject *_setAP(PyObject *ap, int rect = 0) + { + fz_buffer *res = NULL; + fz_var(res); + fz_try(gctx) { + pdf_annot *annot = (pdf_annot *) $self; + pdf_obj *apobj = pdf_dict_getl(gctx, annot->obj, PDF_NAME(AP), + PDF_NAME(N), NULL); + if (!apobj) THROWMSG("annot has no /AP/N object"); + if (!pdf_is_stream(gctx, apobj)) + THROWMSG("/AP/N object is no stream"); + res = JM_BufferFromBytes(gctx, ap); + if (!res) THROWMSG("invalid /AP stream argument"); + JM_update_stream(gctx, annot->page->doc, apobj, res, 1); + if (rect) { + fz_rect bbox = pdf_dict_get_rect(gctx, annot->obj, PDF_NAME(Rect)); + pdf_dict_put_rect(gctx, apobj, PDF_NAME(BBox), bbox); + annot->ap = NULL; + } + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + + //--------------------------------------------------------------------- + // redaction annotation get values + //--------------------------------------------------------------------- + FITZEXCEPTION(_get_redact_values, !result) + %pythonappend _get_redact_values %{ + if not val: + return val + val["rect"] = self.rect + text_color, fontname, fontsize = TOOLS._parse_da(self) + val["text_color"] = text_color + val["fontname"] = fontname + val["fontsize"] = fontsize + fill = self.colors["fill"] + val["fill"] = fill + + %} + PyObject * + _get_redact_values() + { + pdf_annot *annot = (pdf_annot *) $self; + if (pdf_annot_type(gctx, annot) != PDF_ANNOT_REDACT) + return_none; + + PyObject *values = PyDict_New(); + const char *text = NULL; + fz_try(gctx) { + pdf_obj *obj = pdf_dict_gets(gctx, annot->obj, "RO"); + if (obj) { + THROWMSG("unsupported redaction key '/RO'."); + } + obj = pdf_dict_gets(gctx, annot->obj, "OverlayText"); + if (obj) { + text = pdf_to_text_string(gctx, obj); + DICT_SETITEM_DROP(values, dictkey_text, JM_UnicodeFromStr(text)); + } else { + DICT_SETITEM_DROP(values, dictkey_text, Py_BuildValue("s", "")); + } + obj = pdf_dict_get(gctx, annot->obj, PDF_NAME(Q)); + int align = 0; + if (obj) { + align = pdf_to_int(gctx, obj); + } + DICT_SETITEM_DROP(values, dictkey_align, Py_BuildValue("i", align)); + } + fz_catch(gctx) { + Py_DECREF(values); + return NULL; + } + return values; + } + + //--------------------------------------------------------------------- + // annotation set name + //--------------------------------------------------------------------- + PARENTCHECK(setName, """Set /Name (icon) of annotation.""") + PyObject *setName(char *name) + { + fz_try(gctx) { + pdf_annot *annot = (pdf_annot *) $self; + pdf_dict_put_name(gctx, annot->obj, PDF_NAME(Name), name); + pdf_dirty_annot(gctx, annot); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + //--------------------------------------------------------------------- + // annotation set rectangle + //--------------------------------------------------------------------- + PARENTCHECK(setRect, """Set annotation rectangle.""") + PyObject *setRect(PyObject *rect) + { + fz_try(gctx) { + pdf_annot *annot = (pdf_annot *) $self; + pdf_page *pdfpage = annot->page; + fz_matrix rot = JM_rotate_page_matrix(gctx, pdfpage); + fz_rect r = fz_transform_rect(JM_rect_from_py(rect), rot); + pdf_set_annot_rect(gctx, annot, r); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + //--------------------------------------------------------------------- + // annotation set rotation + //--------------------------------------------------------------------- + PARENTCHECK(setRotation, """Set annotation rotation.""") + PyObject *setRotation(int rotate=0) + { + pdf_annot *annot = (pdf_annot *) $self; + int type = pdf_annot_type(gctx, annot); + switch (type) + { + case PDF_ANNOT_CARET: break; + case PDF_ANNOT_CIRCLE: break; + case PDF_ANNOT_FREE_TEXT: break; + case PDF_ANNOT_FILE_ATTACHMENT: break; + case PDF_ANNOT_INK: break; + case PDF_ANNOT_LINE: break; + case PDF_ANNOT_POLY_LINE: break; + case PDF_ANNOT_POLYGON: break; + case PDF_ANNOT_SQUARE: break; + case PDF_ANNOT_STAMP: break; + case PDF_ANNOT_TEXT: break; + default: return_none; + } + int rot = rotate; + while (rot < 0) rot += 360; + while (rot >= 360) rot -= 360; + if (type == PDF_ANNOT_FREE_TEXT && rot % 90 != 0) + rot = 0; + + pdf_dict_put_int(gctx, annot->obj, PDF_NAME(Rotate), rot); + return_none; + } + + //--------------------------------------------------------------------- + // annotation get rotation + //--------------------------------------------------------------------- + %pythoncode %{@property%} + PARENTCHECK(rotation, """Annotation rotation.""") + int rotation() + { + pdf_annot *annot = (pdf_annot *) $self; + pdf_obj *rotation = pdf_dict_get(gctx, annot->obj, PDF_NAME(Rotate)); + if (!rotation) return -1; + return pdf_to_int(gctx, rotation); + } + + //--------------------------------------------------------------------- + // annotation vertices (for "Line", "Polgon", "Ink", etc. + //--------------------------------------------------------------------- + PARENTCHECK(vertices, """Vertex points.""") + %pythoncode %{@property%} + PyObject *vertices() + { + PyObject *res = NULL, *res1 = NULL; + pdf_obj *o, *o1; + pdf_annot *annot = (pdf_annot *) $self; + int i, j; + fz_point point; // point object to work with + fz_matrix page_ctm; // page transformation matrix + pdf_page_transform(gctx, annot->page, NULL, &page_ctm); + fz_matrix derot = JM_derotate_page_matrix(gctx, annot->page); + page_ctm = fz_concat(page_ctm, derot); + + //---------------------------------------------------------------- + // The following objects occur in different annotation types. + // So we are sure that (!o) occurs at most once. + // Every pair of floats is one point, that needs to be separately + // transformed with the page transformation matrix. + //---------------------------------------------------------------- + o = pdf_dict_get(gctx, annot->obj, PDF_NAME(Vertices)); + if (o) goto weiter; + o = pdf_dict_get(gctx, annot->obj, PDF_NAME(L)); + if (o) goto weiter; + o = pdf_dict_get(gctx, annot->obj, PDF_NAME(QuadPoints)); + if (o) goto weiter; + o = pdf_dict_gets(gctx, annot->obj, "CL"); + if (o) goto weiter; + o = pdf_dict_get(gctx, annot->obj, PDF_NAME(InkList)); + if (o) goto inklist; + return_none; + + // handle lists with 1-level depth -------------------------------- + weiter:; + res = PyList_New(0); // create Python list + for (i = 0; i < pdf_array_len(gctx, o); i += 2) + { + point.x = pdf_to_real(gctx, pdf_array_get(gctx, o, i)); + point.y = pdf_to_real(gctx, pdf_array_get(gctx, o, i+1)); + point = fz_transform_point(point, page_ctm); + LIST_APPEND_DROP(res, Py_BuildValue("ff", point.x, point.y)); + } + return res; + + // InkList has 2-level lists -------------------------------------- + inklist:; + res = PyList_New(0); + for (i = 0; i < pdf_array_len(gctx, o); i++) + { + res1 = PyList_New(0); + o1 = pdf_array_get(gctx, o, i); + for (j = 0; j < pdf_array_len(gctx, o1); j += 2) + { + point.x = pdf_to_real(gctx, pdf_array_get(gctx, o1, j)); + point.y = pdf_to_real(gctx, pdf_array_get(gctx, o1, j+1)); + point = fz_transform_point(point, page_ctm); + LIST_APPEND_DROP(res1, Py_BuildValue("ff", point.x, point.y)); + } + LIST_APPEND_DROP(res, res1); + } + return res; + } + + //--------------------------------------------------------------------- + // annotation colors + //--------------------------------------------------------------------- + %pythoncode %{@property%} + PARENTCHECK(colors, """Color definitions.""") + PyObject *colors() + { + pdf_annot *annot = (pdf_annot *) $self; + return JM_annot_colors(gctx, annot->obj); + } + + //--------------------------------------------------------------------- + // annotation update appearance + //--------------------------------------------------------------------- + PyObject *_update_appearance(float opacity=-1, char *blend_mode=NULL, + PyObject *fill_color=NULL, + int rotate = -1) + { + pdf_annot *annot = (pdf_annot *) $self; + int type = pdf_annot_type(gctx, annot); + float fcol[4] = {1,1,1,1}; // std fill color: white + int nfcol = 0; // number of color components + JM_color_FromSequence(fill_color, &nfcol, fcol); + fz_try(gctx) { + pdf_dirty_annot(gctx, annot); // enforce MuPDF /AP formatting + if (type == PDF_ANNOT_FREE_TEXT && EXISTS(fill_color)) + pdf_set_annot_color(gctx, annot, nfcol, fcol); + + int insert_rot = (rotate >= 0) ? 1 : 0; + switch (type) { + case PDF_ANNOT_CARET: + case PDF_ANNOT_CIRCLE: + case PDF_ANNOT_FREE_TEXT: + case PDF_ANNOT_FILE_ATTACHMENT: + case PDF_ANNOT_INK: + case PDF_ANNOT_LINE: + case PDF_ANNOT_POLY_LINE: + case PDF_ANNOT_POLYGON: + case PDF_ANNOT_SQUARE: + case PDF_ANNOT_STAMP: + case PDF_ANNOT_TEXT: break; + default: insert_rot = 0; + } + + if (insert_rot) + pdf_dict_put_int(gctx, annot->obj, PDF_NAME(Rotate), rotate); + annot->needs_new_ap = 1; // re-create appearance stream + pdf_update_annot(gctx, annot); // update the annotation + + } + fz_catch(gctx) { + PySys_WriteStderr("cannot update annot: '%s'\n", fz_caught_message(gctx)); + Py_RETURN_FALSE; + } + + if ((opacity < 0 || opacity >= 1) && !blend_mode) // no opacity, no blend_mode + Py_RETURN_TRUE; + + fz_try(gctx) { // create or update /ExtGState + pdf_obj *ap = pdf_dict_getl(gctx, annot->obj, PDF_NAME(AP), + PDF_NAME(N), NULL); + if (!ap) // should never happen + THROWMSG("annot has no /AP object"); + + pdf_obj *resources = pdf_dict_get(gctx, ap, PDF_NAME(Resources)); + if (!resources) { // no Resources yet: make one + resources = pdf_dict_put_dict(gctx, ap, PDF_NAME(Resources), 2); + } + pdf_obj *alp0 = pdf_new_dict(gctx, annot->page->doc, 3); + if (opacity >= 0 && opacity < 1) { + pdf_dict_put_real(gctx, alp0, PDF_NAME(CA), (double) opacity); + pdf_dict_put_real(gctx, alp0, PDF_NAME(ca), (double) opacity); + pdf_dict_put_real(gctx, annot->obj, PDF_NAME(CA), (double) opacity); + } + if (blend_mode) { + pdf_dict_put_name(gctx, alp0, PDF_NAME(BM), blend_mode); + pdf_dict_put_name(gctx, annot->obj, PDF_NAME(BM), blend_mode); + } + pdf_obj *extg = pdf_dict_get(gctx, resources, PDF_NAME(ExtGState)); + if (!extg) { // no ExtGState yet: make one + extg = pdf_dict_put_dict(gctx, resources, PDF_NAME(ExtGState), 2); + } + pdf_dict_put_drop(gctx, extg, PDF_NAME(H), alp0); + } + + fz_catch(gctx) { + PySys_WriteStderr("could not set opacity or blend mode\n"); + Py_RETURN_FALSE; + } + Py_RETURN_TRUE; + } + + + %pythoncode %{ + def update(self, + blend_mode=None, + opacity=None, + fontsize=0, + fontname=None, + text_color=None, + border_color=None, + fill_color=None, + cross_out=True, + rotate=-1, + ): + + """Update annot appearance. + + Notes: + Depending on the annot type, some parameters make no sense, + while others are only available in this method to achieve the + desired result - especially for 'FreeText' annots. + Args: + blend_mode: set the blend mode, all annotations. + opacity: set the opacity, all annotations. + fontsize: set fontsize, 'FreeText' only. + fontname: set the font, 'FreeText' only. + border_color: set border color, 'FreeText' only. + text_color: set text color, 'FreeText' only. + fill_color: set fill color, all annotations. + cross_out: draw diagonal lines, 'Redact' only. + rotate: set rotation, 'FreeText' and some others. + """ + CheckParent(self) + def color_string(cs, code): + """Return valid PDF color operator for a given color sequence. + """ + if not cs: + return b"" + if hasattr(cs, "__float__") or len(cs) == 1: + app = " g\n" if code == "f" else " G\n" + elif len(cs) == 3: + app = " rg\n" if code == "f" else " RG\n" + elif len(cs) == 4: + app = " k\n" if code == "f" else " K\n" + else: + return b"" + + if hasattr(cs, "__len__"): + col = " ".join(map(str, cs)) + app + else: + col = "%g" % cs + app + + return bytes(col, "utf8") if not fitz_py2 else col + + type = self.type[0] # get the annot type + dt = self.border["dashes"] # get the dashes spec + bwidth = self.border["width"] # get border line width + stroke = self.colors["stroke"] # get the stroke color + if fill_color is not None and type in (PDF_ANNOT_FREE_TEXT, PDF_ANNOT_REDACT): + fill = fill_color + else: + fill = self.colors["fill"] + if not fill: + fill = None + + rect = None # self.rect # prevent MuPDF fiddling with it + apnmat = self.APNMatrix # prevent MuPDF fiddling with it + if rotate != -1: # sanitize rotation value + while rotate < 0: + rotate += 360 + while rotate >= 360: + rotate -= 360 + if type == PDF_ANNOT_FREE_TEXT and rotate % 90 != 0: + rotate = 0 + + #------------------------------------------------------------------ + # handle opacity and blend mode + #------------------------------------------------------------------ + if blend_mode is None: + blend_mode = self.blendMode() + if not hasattr(opacity, "__float__"): + opacity = self.opacity + + if 0 <= opacity < 1 or blend_mode is not None: + opa_code = "/H gs\n" # then we must reference this 'gs' + else: + opa_code = "" + + #------------------------------------------------------------------ + # now invoke MuPDF to update the annot appearance + #------------------------------------------------------------------ + val = self._update_appearance( + opacity=opacity, + blend_mode=blend_mode, + fill_color=fill, + rotate=rotate, + ) + if not val: # something went wrong, skip the rest + return val + + bfill = color_string(fill, "f") + bstroke = color_string(stroke, "s") + + p_ctm = self.parent.transformationMatrix + imat = ~p_ctm # inverse page transf. matrix + + if dt: + dashes = "[" + " ".join(map(str, dt)) + "] 0 d\n" + dashes = dashes.encode("utf-8") + else: + dashes = None + + if self.lineEnds: + line_end_le, line_end_ri = self.lineEnds + else: + line_end_le, line_end_ri = 0, 0 # init line end codes + + # read contents as created by MuPDF + ap = self._getAP() + ap_tab = ap.splitlines() # split in single lines + ap_updated = False # assume we did nothing + + if type == PDF_ANNOT_REDACT: + if cross_out: # create crossed-out rect + ap_updated = True + ap_tab = ap_tab[:-1] + _, LL, LR, UR, UL = ap_tab + ap_tab.append(LR) + ap_tab.append(LL) + ap_tab.append(UR) + ap_tab.append(LL) + ap_tab.append(UL) + ap_tab.append(b"S") + + if bwidth > 0 or bstroke != b"": + ap_updated = True + ntab = [b"%g w" % bwidth] if bwidth > 0 else [] + for line in ap_tab: + if line.endswith(b"w"): + continue + if line.endswith(b"RG") and bstroke != b"": + line = bstroke[:-1] + ntab.append(line) + ap_tab = ntab + + ap = b"\n".join(ap_tab) + + if type == PDF_ANNOT_FREE_TEXT: + CheckColor(border_color) + CheckColor(text_color) + tcol, fname, fsize = TOOLS._parse_da(self) + + # read and update default appearance as necessary + update_default_appearance = False + if fsize <= 0: + fsize = 12 + update_default_appearance = True + if text_color is not None: + tcol = text_color + update_default_appearance = True + if fontname is not None: + fname = fontname + update_default_appearance = True + if fontsize > 0: + fsize = fontsize + update_default_appearance = True + + da_str = "" + if len(tcol) == 3: + fmt = "{:g} {:g} {:g} rg /{f:s} {s:g} Tf" + elif len(tcol) == 1: + fmt = "{:g} g /{f:s} {s:g} Tf" + elif len(tcol) == 4: + fmt = "{:g} {:g} {:g} {:g} k /{f:s} {s:g} Tf" + da_str = fmt.format(*tcol, f=fname, s=fsize) + TOOLS._update_da(self, da_str) + + for i, item in enumerate(ap_tab): + if (item.endswith(b" w") + and bwidth > 0 + and border_color is not None + ): # update border color + ap_tab[i + 1] = color_string(border_color, "s") + continue + if item == b"BT": # update text color + ap_tab[i + 1] = color_string(tcol, "f") + continue + + if dashes is not None: # handle dashes + ap_tab.insert(0, dashes) + dashes = None + + ap = b"\n".join(ap_tab) # updated AP stream + ap_updated = True + + if type in (PDF_ANNOT_POLYGON, PDF_ANNOT_POLY_LINE): + ap = b"\n".join(ap_tab[:-1]) + b"\n" + ap_updated = True + if bfill != b"": + if type == PDF_ANNOT_POLYGON: + ap = ap + bfill + b"b" # close, fill, and stroke + elif type == PDF_ANNOT_POLY_LINE: + ap = ap + bfill + b"B" # fill and stroke + else: + if type == PDF_ANNOT_POLYGON: + ap = ap + b"s" # close and stroke + elif type == PDF_ANNOT_POLY_LINE: + ap = ap + b"S" # stroke + + if dashes is not None: # handle dashes + ap = dashes + ap + # reset dashing - only applies for LINE annots with line ends given + ap = ap.replace(b"\nS\n", b"\nS\n[] 0 d\n", 1) + ap_updated = True + + if opa_code: + ap = opa_code.encode("utf-8") + ap + ap_updated = True + + ap = b"q\n" + ap + b"\nQ\n" + #---------------------------------------------------------------------- + # the following handles line end symbols for 'Polygon' and 'Polyline' + #---------------------------------------------------------------------- + if line_end_le + line_end_ri > 0 and type in (PDF_ANNOT_POLYGON, PDF_ANNOT_POLY_LINE): + + le_funcs = (None, TOOLS._le_square, TOOLS._le_circle, + TOOLS._le_diamond, TOOLS._le_openarrow, + TOOLS._le_closedarrow, TOOLS._le_butt, + TOOLS._le_ropenarrow, TOOLS._le_rclosedarrow, + TOOLS._le_slash) + le_funcs_range = range(1, len(le_funcs)) + d = 2 * max(1, self.border["width"]) + rect = self.rect + (-d, -d, d, d) + ap_updated = True + points = self.vertices + if line_end_le in le_funcs_range: + p1 = Point(points[0]) * imat + p2 = Point(points[1]) * imat + left = le_funcs[line_end_le](self, p1, p2, False, fill_color) + ap += bytes(left, "utf8") if not fitz_py2 else left + if line_end_ri in le_funcs_range: + p1 = Point(points[-2]) * imat + p2 = Point(points[-1]) * imat + left = le_funcs[line_end_ri](self, p1, p2, True, fill_color) + ap += bytes(left, "utf8") if not fitz_py2 else left + + if ap_updated: + if rect: # rect modified here? + self.setRect(rect) + self._setAP(ap, rect=1) + else: + self._setAP(ap, rect=0) + + #------------------------------- + # handle annotation rotations + #------------------------------- + if type not in ( # only these types are supported + PDF_ANNOT_CARET, + PDF_ANNOT_CIRCLE, + PDF_ANNOT_FILE_ATTACHMENT, + PDF_ANNOT_INK, + PDF_ANNOT_LINE, + PDF_ANNOT_POLY_LINE, + PDF_ANNOT_POLYGON, + PDF_ANNOT_SQUARE, + PDF_ANNOT_STAMP, + PDF_ANNOT_TEXT, + ): + return + + rot = self.rotation # get value from annot object + if rot == -1: # nothing to change + return + + M = (self.rect.tl + self.rect.br) / 2 # center of annot rect + + if rot == 0: # undo rotations + if abs(apnmat - Matrix(1, 1)) < 1e-5: + return # matrix already is a no-op + quad = self.rect.morph(M, ~apnmat) # derotate rect + self.setRect(quad.rect) + self.setAPNMatrix(Matrix(1, 1)) # appearance matrix = no-op + return + + mat = Matrix(rot) + quad = self.rect.morph(M, mat) + self.setRect(quad.rect) + self.setAPNMatrix(apnmat * mat) + + %} + + //--------------------------------------------------------------------- + // annotation set colors + //--------------------------------------------------------------------- + %pythonprepend setColors %{ + """Set 'stroke' and 'fill' colors. + + Use either a dict or the direct arguments. + """ + CheckParent(self) + if type(colors) is not dict: + colors = {"fill": fill, "stroke": stroke} + %} + void setColors(PyObject *colors=NULL, PyObject *fill=NULL, PyObject *stroke=NULL) + { + if (!PyDict_Check(colors)) return; + pdf_annot *annot = (pdf_annot *) $self; + int type = pdf_annot_type(gctx, annot); + PyObject *ccol, *icol; + ccol = PyDict_GetItem(colors, dictkey_stroke); + icol = PyDict_GetItem(colors, dictkey_fill); + int i, n; + float col[4]; + n = 0; + if (EXISTS(ccol)) { + JM_color_FromSequence(ccol, &n, col); + fz_try(gctx) { + pdf_set_annot_color(gctx, annot, n, col); + } + fz_catch(gctx) { + JM_Warning("could not set stroke color for this annot type"); + } + } + n = 0; + if (EXISTS(icol)) { + JM_color_FromSequence(icol, &n, col); + if (type != PDF_ANNOT_REDACT) { + fz_try(gctx) + pdf_set_annot_interior_color(gctx, annot, n, col); + fz_catch(gctx) + JM_Warning("cannot set fill color for this annot type"); + } else { + pdf_obj *arr = pdf_new_array(gctx, annot->page->doc, n); + for (i = 0; i < n; i++) { + pdf_array_push_real(gctx, arr, col[i]); + } + pdf_dict_put_drop(gctx, annot->obj, PDF_NAME(IC), arr); + } + } + return; + } + + //--------------------------------------------------------------------- + // annotation lineEnds + //--------------------------------------------------------------------- + %pythoncode %{@property%} + PARENTCHECK(lineEnds, """Line end codes.""") + PyObject *lineEnds() + { + pdf_annot *annot = (pdf_annot *) $self; + + // return nothing for invalid annot types + if (!pdf_annot_has_line_ending_styles(gctx, annot)) + return_none; + + int lstart = (int) pdf_annot_line_start_style(gctx, annot); + int lend = (int) pdf_annot_line_end_style(gctx, annot); + return Py_BuildValue("ii", lstart, lend); + } + + //--------------------------------------------------------------------- + // annotation set line ends + //--------------------------------------------------------------------- + PARENTCHECK(setLineEnds, """Set line end codes.""") + void setLineEnds(int start, int end) + { + pdf_annot *annot = (pdf_annot *) $self; + if (pdf_annot_has_line_ending_styles(gctx, annot)) + pdf_set_annot_line_ending_styles(gctx, annot, start, end); + else + JM_Warning("annot type has no line ends"); + } + + //--------------------------------------------------------------------- + // annotation type + //--------------------------------------------------------------------- + PARENTCHECK(type, """Annotation type.""") + %pythoncode %{@property%} + PyObject *type() + { + pdf_annot *annot = (pdf_annot *) $self; + int type = pdf_annot_type(gctx, annot); + const char *c = pdf_string_from_annot_type(gctx, type); + pdf_obj *o = pdf_dict_gets(gctx, annot->obj, "IT"); + if (!o || !pdf_is_name(gctx, o)) + return Py_BuildValue("is", type, c); // no IT entry + const char *it = pdf_to_name(gctx, o); + return Py_BuildValue("iss", type, c, it); + } + + //--------------------------------------------------------------------- + // annotation opacity + //--------------------------------------------------------------------- + PARENTCHECK(opacity, """Opacity.""") + %pythoncode %{@property%} + PyObject *opacity() + { + pdf_annot *annot = (pdf_annot *) $self; + double opy = -1; + pdf_obj *ca = pdf_dict_get(gctx, annot->obj, PDF_NAME(CA)); + if (pdf_is_number(gctx, ca)) + opy = pdf_to_real(gctx, ca); + return Py_BuildValue("f", opy); + } + + //--------------------------------------------------------------------- + // annotation set opacity + //--------------------------------------------------------------------- + PARENTCHECK(setOpacity, """Set opacity.""") + void setOpacity(float opacity) + { + pdf_annot *annot = (pdf_annot *) $self; + if (!INRANGE(opacity, 0.0f, 1.0f)) + { + pdf_set_annot_opacity(gctx, annot, 1); + return; + } + pdf_set_annot_opacity(gctx, annot, opacity); + if (opacity < 1.0f) + { + annot->page->transparency = 1; + } + } + + + //--------------------------------------------------------------------- + // annotation get attached file info + //--------------------------------------------------------------------- + FITZEXCEPTION(fileInfo, !result) + PARENTCHECK(fileInfo, """Attached file information.""") + PyObject *fileInfo() + { + PyObject *res = PyDict_New(); // create Python dict + char *filename = NULL; + char *desc = NULL; + int length = -1, size = -1; + pdf_obj *stream = NULL, *o = NULL, *fs = NULL; + pdf_annot *annot = (pdf_annot *) $self; + + fz_try(gctx) { + int type = (int) pdf_annot_type(gctx, annot); + if (type != PDF_ANNOT_FILE_ATTACHMENT) + THROWMSG("not a file attachment annot"); + stream = pdf_dict_getl(gctx, annot->obj, PDF_NAME(FS), + PDF_NAME(EF), PDF_NAME(F), NULL); + if (!stream) THROWMSG("bad PDF: file entry not found"); + } + fz_catch(gctx) { + return NULL; + } + + fs = pdf_dict_get(gctx, annot->obj, PDF_NAME(FS)); + + o = pdf_dict_get(gctx, fs, PDF_NAME(UF)); + if (o) { + filename = (char *) pdf_to_text_string(gctx, o); + } else { + o = pdf_dict_get(gctx, fs, PDF_NAME(F)); + if (o) filename = (char *) pdf_to_text_string(gctx, o); + } + + o = pdf_dict_get(gctx, fs, PDF_NAME(Desc)); + if (o) desc = (char *) pdf_to_text_string(gctx, o); + + o = pdf_dict_get(gctx, stream, PDF_NAME(Length)); + if (o) length = pdf_to_int(gctx, o); + + o = pdf_dict_getl(gctx, stream, PDF_NAME(Params), + PDF_NAME(Size), NULL); + if (o) size = pdf_to_int(gctx, o); + + DICT_SETITEM_DROP(res, dictkey_filename, JM_EscapeStrFromStr(filename)); + DICT_SETITEM_DROP(res, dictkey_desc, JM_UnicodeFromStr(desc)); + DICT_SETITEM_DROP(res, dictkey_length, Py_BuildValue("i", length)); + DICT_SETITEM_DROP(res, dictkey_size, Py_BuildValue("i", size)); + return res; + } + + //--------------------------------------------------------------------- + // annotation get attached file content + //--------------------------------------------------------------------- + FITZEXCEPTION(fileGet, !result) + PARENTCHECK(fileGet, """Attached file content.""") + PyObject *fileGet() + { + PyObject *res = NULL; + pdf_obj *stream = NULL; + fz_buffer *buf = NULL; + pdf_annot *annot = (pdf_annot *) $self; + fz_var(buf); + fz_try(gctx) { + int type = (int) pdf_annot_type(gctx, annot); + if (type != PDF_ANNOT_FILE_ATTACHMENT) + THROWMSG("not a file attachment annot"); + stream = pdf_dict_getl(gctx, annot->obj, PDF_NAME(FS), + PDF_NAME(EF), PDF_NAME(F), NULL); + if (!stream) THROWMSG("bad PDF: file entry not found"); + buf = pdf_load_stream(gctx, stream); + res = JM_BinFromBuffer(gctx, buf); + } + fz_always(gctx) { + fz_drop_buffer(gctx, buf); + } + fz_catch(gctx) { + return NULL; + } + return res; + } + + //--------------------------------------------------------------------- + // annotation update attached file + //--------------------------------------------------------------------- + FITZEXCEPTION(fileUpd, !result) + %pythonprepend fileUpd %{ + """Update attached file.""" + CheckParent(self)%} + + PyObject *fileUpd(PyObject *buffer=NULL, char *filename=NULL, char *ufilename=NULL, char *desc=NULL) + { + pdf_document *pdf = NULL; // to be filled in + char *data = NULL; // for new file content + fz_buffer *res = NULL; // for compressed content + pdf_obj *stream = NULL, *fs = NULL; + int64_t size = 0; + pdf_annot *annot = (pdf_annot *) $self; + fz_try(gctx) { + pdf = annot->page->doc; // the owning PDF + int type = (int) pdf_annot_type(gctx, annot); + if (type != PDF_ANNOT_FILE_ATTACHMENT) + THROWMSG("bad annot type"); + stream = pdf_dict_getl(gctx, annot->obj, PDF_NAME(FS), + PDF_NAME(EF), PDF_NAME(F), NULL); + // the object for file content + if (!stream) THROWMSG("bad PDF: no /EF object"); + + fs = pdf_dict_get(gctx, annot->obj, PDF_NAME(FS)); + + // file content given + res = JM_BufferFromBytes(gctx, buffer); + if (buffer && !res) THROWMSG("bad type: 'buffer'"); + if (res) { + JM_update_stream(gctx, pdf, stream, res, 1); + // adjust /DL and /Size parameters + int64_t len = (int64_t) fz_buffer_storage(gctx, res, NULL); + pdf_obj *l = pdf_new_int(gctx, len); + pdf_dict_put(gctx, stream, PDF_NAME(DL), l); + pdf_dict_putl(gctx, stream, l, PDF_NAME(Params), PDF_NAME(Size), NULL); + } + + if (filename) { + pdf_dict_put_text_string(gctx, stream, PDF_NAME(F), filename); + pdf_dict_put_text_string(gctx, fs, PDF_NAME(F), filename); + pdf_dict_put_text_string(gctx, stream, PDF_NAME(UF), filename); + pdf_dict_put_text_string(gctx, fs, PDF_NAME(UF), filename); + pdf_dict_put_text_string(gctx, annot->obj, PDF_NAME(Contents), filename); + } + + if (ufilename) { + pdf_dict_put_text_string(gctx, stream, PDF_NAME(UF), ufilename); + pdf_dict_put_text_string(gctx, fs, PDF_NAME(UF), ufilename); + } + + if (desc) { + pdf_dict_put_text_string(gctx, stream, PDF_NAME(Desc), desc); + pdf_dict_put_text_string(gctx, fs, PDF_NAME(Desc), desc); + } + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + } + fz_catch(gctx) { + return NULL; + } + pdf->dirty = 1; + return_none; + } + + //--------------------------------------------------------------------- + // annotation info + //--------------------------------------------------------------------- + %pythoncode %{@property%} + PARENTCHECK(info, """Various information details.""") + PyObject *info() + { + pdf_annot *annot = (pdf_annot *) $self; + PyObject *res = PyDict_New(); + pdf_obj *o; + + DICT_SETITEM_DROP(res, dictkey_content, + JM_UnicodeFromStr(pdf_annot_contents(gctx, annot))); + + o = pdf_dict_get(gctx, annot->obj, PDF_NAME(Name)); + DICT_SETITEM_DROP(res, dictkey_name, JM_UnicodeFromStr(pdf_to_name(gctx, o))); + + // Title (= author) + o = pdf_dict_get(gctx, annot->obj, PDF_NAME(T)); + DICT_SETITEM_DROP(res, dictkey_title, JM_UnicodeFromStr(pdf_to_text_string(gctx, o))); + + // CreationDate + o = pdf_dict_gets(gctx, annot->obj, "CreationDate"); + DICT_SETITEM_DROP(res, dictkey_creationDate, + JM_UnicodeFromStr(pdf_to_text_string(gctx, o))); + + // ModDate + o = pdf_dict_get(gctx, annot->obj, PDF_NAME(M)); + DICT_SETITEM_DROP(res, dictkey_modDate, JM_UnicodeFromStr(pdf_to_text_string(gctx, o))); + + // Subj + o = pdf_dict_gets(gctx, annot->obj, "Subj"); + DICT_SETITEM_DROP(res, dictkey_subject, + Py_BuildValue("s",pdf_to_text_string(gctx, o))); + + // Identification (PDF key /NM) + o = pdf_dict_gets(gctx, annot->obj, "NM"); + DICT_SETITEM_DROP(res, dictkey_id, + JM_UnicodeFromStr(pdf_to_text_string(gctx, o))); + + return res; + } + + //--------------------------------------------------------------------- + // annotation set information + //--------------------------------------------------------------------- + FITZEXCEPTION(setInfo, !result) + %pythonprepend setInfo %{ + """Set various properties.""" + CheckParent(self) + if type(info) is dict: # build the args from the dictionary + content = info.get("content", None) + title = info.get("title", None) + creationDate = info.get("creationDate", None) + modDate = info.get("modDate", None) + subject = info.get("subject", None) + info = None + %} + PyObject *setInfo(PyObject *info=NULL, char *content=NULL, char *title=NULL, + char *creationDate=NULL, char *modDate=NULL, char *subject=NULL) + { + pdf_annot *annot = (pdf_annot *) $self; + // use this to indicate a 'markup' annot type + int is_markup = pdf_annot_has_author(gctx, annot); + fz_try(gctx) { + // contents + if (content) + pdf_set_annot_contents(gctx, annot, content); + + if (is_markup) { + // title (= author) + if (title) + pdf_set_annot_author(gctx, annot, title); + + // creation date + if (creationDate) + pdf_dict_put_text_string(gctx, annot->obj, + PDF_NAME(CreationDate), creationDate); + + // mod date + if (modDate) + pdf_dict_put_text_string(gctx, annot->obj, + PDF_NAME(M), modDate); + + // subject + if (subject) + pdf_dict_puts_drop(gctx, annot->obj, "Subj", + pdf_new_text_string(gctx, subject)); + } + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + //--------------------------------------------------------------------- + // annotation border + //--------------------------------------------------------------------- + %pythoncode %{@property%} + PARENTCHECK(border, """Border information.""") + PyObject *border() + { + pdf_annot *annot = (pdf_annot *) $self; + return JM_annot_border(gctx, annot->obj); + } + + //--------------------------------------------------------------------- + // set annotation border + //--------------------------------------------------------------------- + %pythonprepend setBorder %{ + """Set border properties. + + Either a dict, or direct arguments width, style and dashes.""" + CheckParent(self) + if type(border) is not dict: + border = {"width": width, "style": style, "dashes": dashes} + %} + PyObject *setBorder(PyObject *border=NULL, float width=0, char *style=NULL, PyObject *dashes=NULL) + { + pdf_annot *annot = (pdf_annot *) $self; + return JM_annot_set_border(gctx, border, annot->page->doc, annot->obj); + } + + //--------------------------------------------------------------------- + // annotation flags + //--------------------------------------------------------------------- + %pythoncode %{@property%} + PARENTCHECK(flags, """Flags field.""") + int flags() + { + pdf_annot *annot = (pdf_annot *) $self; + return pdf_annot_flags(gctx, annot); + } + + //--------------------------------------------------------------------- + // annotation clean contents + //--------------------------------------------------------------------- + FITZEXCEPTION(_cleanContents, !result) + PARENTCHECK(_cleanContents, """Clean appearance contents object.""") + PyObject *_cleanContents() + { + pdf_annot *annot = (pdf_annot *) $self; + pdf_filter_options filter = { + NULL, // opaque + NULL, // image filter + NULL, // text filter + NULL, // after text + NULL, // end page + 1, // recurse: true + 1, // instance forms + 1, // only sanitize, no filtering + 0 // do not ascii-escape binary data + }; + fz_try(gctx) { + pdf_filter_annot_contents(gctx, annot->page->doc, annot, &filter); + } + fz_catch(gctx) { + return NULL; + } + pdf_dirty_annot(gctx, annot); + return_none; + } + + //--------------------------------------------------------------------- + // set annotation flags + //--------------------------------------------------------------------- + PARENTCHECK(setFlags, """Set annotation flags.""") + void setFlags(int flags) + { + pdf_annot *annot = (pdf_annot *) $self; + pdf_set_annot_flags(gctx, annot, flags); + } + + //--------------------------------------------------------------------- + // annotation delete responses + //--------------------------------------------------------------------- + FITZEXCEPTION(delete_responses, !result) + PARENTCHECK(delete_responses, """Delete responding annotations.""") + PyObject *delete_responses() + { + pdf_annot *annot = (pdf_annot *) $self; + pdf_page *page = annot->page; + pdf_annot *irt_annot = NULL; + fz_try(gctx) { + while (1) { + irt_annot = JM_find_annot_irt(gctx, annot); + if (!irt_annot) + break; + JM_delete_annot(gctx, page, irt_annot); + } + pdf_dict_del(gctx, annot->obj, PDF_NAME(Popup)); + pdf_obj *annots = pdf_dict_get(gctx, page->obj, PDF_NAME(Annots)); + int i, n = pdf_array_len(gctx, annots), found = 0; + for (i = n - 1; i >= 0; i--) { + pdf_obj *o = pdf_array_get(gctx, annots, i); + pdf_obj *p = pdf_dict_get(gctx, o, PDF_NAME(Parent)); + if (!p) + continue; + if (!pdf_objcmp(gctx, p, annot->obj)) { + pdf_array_delete(gctx, annots, i); + found = 1; + } + } + if (found > 0) { + pdf_dict_put(gctx, page->obj, PDF_NAME(Annots), annots); + } + } + fz_catch(gctx) { + return NULL; + } + pdf_dirty_annot(gctx, annot); + return_none; + } + + //--------------------------------------------------------------------- + // next annotation + //--------------------------------------------------------------------- + PARENTCHECK(next, """Next annotation.""") + %pythonappend next %{ + if not val: + return None + val.thisown = True + val.parent = self.parent # copy owning page object from previous annot + val.parent._annot_refs[id(val)] = val + + if val.type[0] == PDF_ANNOT_WIDGET: + widget = Widget() + TOOLS._fill_widget(val, widget) + val = widget + %} + %pythoncode %{@property%} + struct Annot *next() + { + pdf_annot *this_annot = (pdf_annot *) $self; + int type = pdf_annot_type(gctx, this_annot); + pdf_annot *annot; + + if (type != PDF_ANNOT_WIDGET) + { + annot = pdf_next_annot(gctx, this_annot); + } + else + { + annot = (pdf_widget *) pdf_next_widget(gctx, (pdf_widget *) this_annot); + } + + if (annot) + pdf_keep_annot(gctx, annot); + return (struct Annot *) annot; + } + + + //--------------------------------------------------------------------- + // annotation pixmap + //--------------------------------------------------------------------- + FITZEXCEPTION(getPixmap, !result) + PARENTCHECK(getPixmap, """Annotation Pixmap.""") + %pythonprepend getPixmap +%{"""Annotation Pixmap.""" + +CheckParent(self) +cspaces = {"gray": csGRAY, "rgb": csRGB, "cmyk": csCMYK} +if type(colorspace) is str: + colorspace = cspaces.get(colorspace.lower(), None) +%} + struct Pixmap * + getPixmap(PyObject *matrix = NULL, struct Colorspace *colorspace = NULL, int alpha = 0) + { + fz_matrix ctm = JM_matrix_from_py(matrix); + fz_colorspace *cs = (fz_colorspace *) colorspace; + fz_pixmap *pix = NULL; + if (!cs) { + cs = fz_device_rgb(gctx); + } + + fz_try(gctx) { + pix = pdf_new_pixmap_from_annot(gctx, (pdf_annot *) $self, ctm, cs, NULL, alpha); + } + fz_catch(gctx) { + return NULL; + } + return (struct Pixmap *) pix; + } + + + %pythoncode %{ + def _erase(self): + try: + self.parent._forget_annot(self) + except: + return + if getattr(self, "thisown", False): + self.__swig_destroy__(self) + self.thisown = False + self.parent = None + + def __str__(self): + CheckParent(self) + return "'%s' annotation on %s" % (self.type[1], str(self.parent)) + + def __repr__(self): + CheckParent(self) + return "'%s' annotation on %s" % (self.type[1], str(self.parent)) + + def __del__(self): + if self.parent is None: + retturn + self._erase()%} + } +}; +%clearnodefaultctor; + +//----------------------------------------------------------------------------- +// fz_link +//----------------------------------------------------------------------------- +%nodefaultctor; +struct Link +{ + %immutable; + %extend { + ~Link() { + DEBUGMSG1("Link"); + fz_drop_link(gctx, (fz_link *) $self); + DEBUGMSG2; + } + + PyObject *_border(struct Document *doc, int xref) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) doc); + if (!pdf) return_none; + pdf_obj *link_obj = pdf_new_indirect(gctx, pdf, xref, 0); + if (!link_obj) return_none; + PyObject *b = JM_annot_border(gctx, link_obj); + pdf_drop_obj(gctx, link_obj); + return b; + } + + PyObject *_setBorder(PyObject *border, struct Document *doc, int xref) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) doc); + if (!pdf) return_none; + pdf_obj *link_obj = pdf_new_indirect(gctx, pdf, xref, 0); + if (!link_obj) return_none; + PyObject *b = JM_annot_set_border(gctx, border, pdf, link_obj); + pdf_drop_obj(gctx, link_obj); + return b; + } + + PyObject *_colors(struct Document *doc, int xref) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) doc); + if (!pdf) return_none; + pdf_obj *link_obj = pdf_new_indirect(gctx, pdf, xref, 0); + if (!link_obj) return_none; + PyObject *b = JM_annot_colors(gctx, link_obj); + pdf_drop_obj(gctx, link_obj); + return b; + } + + PyObject *_setColors(PyObject *colors, struct Document *doc, int xref) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) doc); + pdf_obj *arr = NULL; + int i; + if (!pdf) return_none; + if (!PyDict_Check(colors)) return_none; + float scol[4] = {0.0f, 0.0f, 0.0f, 0.0f}; + int nscol = 0; + float fcol[4] = {0.0f, 0.0f, 0.0f, 0.0f}; + int nfcol = 0; + PyObject *stroke = PyDict_GetItem(colors, dictkey_stroke); + PyObject *fill = PyDict_GetItem(colors, dictkey_fill); + JM_color_FromSequence(stroke, &nscol, scol); + JM_color_FromSequence(fill, &nfcol, fcol); + if (!nscol && !nfcol) return_none; + pdf_obj *link_obj = pdf_new_indirect(gctx, pdf, xref, 0); + if (!link_obj) return_none; + if (nscol > 0) + { + arr = pdf_new_array(gctx, pdf, nscol); + for (i = 0; i < nscol; i++) + pdf_array_push_real(gctx, arr, scol[i]); + pdf_dict_put_drop(gctx, link_obj, PDF_NAME(C), arr); + } + if (nfcol > 0) JM_Warning("this annot type has no fill color)"); + pdf_drop_obj(gctx, link_obj); + return_none; + } + + %pythoncode %{ + @property + def border(self): + return self._border(self.parent.parent.this, self.xref) + + def setBorder(self, border=None, width=0, dashes=None, style=None): + if type(border) is not dict: + border = {"width": width, "style": style, "dashes": dashes} + return self._setBorder(border, self.parent.parent.this, self.xref) + + @property + def colors(self): + return self._colors(self.parent.parent.this, self.xref) + + def setColors(self, colors=None, stroke=None, fill=None): + if type(colors) is not dict: + colors = {"fill": fill, "stroke": stroke} + return self._setColors(colors, self.parent.parent.this, self.xref) + %} + %pythoncode %{@property%} + PARENTCHECK(uri, """Uri string.""") + PyObject *uri() + { + fz_link *this_link = (fz_link *) $self; + return JM_UnicodeFromStr(this_link->uri); + } + + %pythoncode %{@property%} + PARENTCHECK(isExternal, """External indicator.""") + PyObject *isExternal() + { + fz_link *this_link = (fz_link *) $self; + if (!this_link->uri) Py_RETURN_FALSE; + return JM_BOOL(fz_is_external_link(gctx, this_link->uri)); + } + + %pythoncode + %{ + page = -1 + @property + def dest(self): + """Create link destination details.""" + if hasattr(self, "parent") and self.parent is None: + raise ValueError("orphaned object: parent is None") + if self.parent.parent.isClosed or self.parent.parent.isEncrypted: + raise ValueError("document closed or encrypted") + doc = self.parent.parent + + if self.isExternal or self.uri.startswith("#"): + uri = None + else: + uri = doc.resolveLink(self.uri) + + return linkDest(self, uri) + %} + + PARENTCHECK(rect, """Rectangle ('hot area').""") + %pythoncode %{@property%} + %pythonappend rect %{val = Rect(val)%} + PyObject *rect() + { + fz_link *this_link = (fz_link *) $self; + return JM_py_from_rect(this_link->rect); + } + + //--------------------------------------------------------------------- + // next link + //--------------------------------------------------------------------- + // we need to increase the link refs number + // so that it will not be freed when the head is dropped + PARENTCHECK(next, """Next link.""") + %pythonappend next %{ + if val: + val.thisown = True + val.parent = self.parent # copy owning page from prev link + val.parent._annot_refs[id(val)] = val + if self.xref > 0: # prev link has an xref + link_xrefs = self.parent._getLinkXrefs() + idx = link_xrefs.index(self.xref) + val.xref = link_xrefs[idx + 1] + else: + val.xref = 0 + %} + %pythoncode %{@property%} + struct Link *next() + { + fz_link *this_link = (fz_link *) $self; + fz_link *next_link = this_link->next; + if (!next_link) return NULL; + next_link = fz_keep_link(gctx, next_link); + return (struct Link *) next_link; + } + + %pythoncode %{ + def _erase(self): + try: + self.parent._forget_annot(self) + except: + pass + if getattr(self, "thisown", False): + self.__swig_destroy__(self) + self.parent = None + self.thisown = False + + def __str__(self): + CheckParent(self) + return "link on " + str(self.parent) + + def __repr__(self): + CheckParent(self) + return "link on " + str(self.parent) + + def __del__(self): + self._erase()%} + + } +}; +%clearnodefaultctor; + +//----------------------------------------------------------------------------- +// fz_display_list +//----------------------------------------------------------------------------- +struct DisplayList { + %extend + { + ~DisplayList() { + DEBUGMSG1("DisplayList"); + fz_drop_display_list(gctx, (fz_display_list *) $self); + DEBUGMSG2; + } + FITZEXCEPTION(DisplayList, !result) + DisplayList(PyObject *mediabox) + { + fz_display_list *dl = NULL; + fz_try(gctx) { + dl = fz_new_display_list(gctx, JM_rect_from_py(mediabox)); + } + fz_catch(gctx) { + return NULL; + } + return (struct DisplayList *) dl; + } + + FITZEXCEPTION(run, !result) + PyObject *run(struct DeviceWrapper *dw, PyObject *m, PyObject *area) { + fz_try(gctx) { + fz_run_display_list(gctx, (fz_display_list *) $self, dw->device, + JM_matrix_from_py(m), JM_rect_from_py(area), NULL); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + //--------------------------------------------------------------------- + // DisplayList.rect + //--------------------------------------------------------------------- + %pythoncode%{@property%} + %pythonappend rect %{val = Rect(val)%} + PyObject *rect() + { + return JM_py_from_rect(fz_bound_display_list(gctx, (fz_display_list *) $self)); + } + + //--------------------------------------------------------------------- + // DisplayList.getPixmap + //--------------------------------------------------------------------- + FITZEXCEPTION(getPixmap, !result) + struct Pixmap *getPixmap(PyObject *matrix=NULL, + struct Colorspace *colorspace=NULL, + int alpha=1, + PyObject *clip=NULL) + { + fz_colorspace *cs = NULL; + fz_pixmap *pix = NULL; + + if (colorspace) cs = (fz_colorspace *) colorspace; + else cs = fz_device_rgb(gctx); + + fz_try(gctx) { + pix = JM_pixmap_from_display_list(gctx, + (fz_display_list *) $self, matrix, cs, + alpha, clip, NULL); + } + fz_catch(gctx) { + return NULL; + } + return (struct Pixmap *) pix; + } + + //--------------------------------------------------------------------- + // DisplayList.getTextPage + //--------------------------------------------------------------------- + FITZEXCEPTION(getTextPage, !result) + struct TextPage *getTextPage(int flags = 3) + { + fz_display_list *this_dl = (fz_display_list *) $self; + fz_stext_page *tp = NULL; + fz_try(gctx) { + fz_stext_options stext_options = { 0 }; + stext_options.flags = flags; + tp = fz_new_stext_page_from_display_list(gctx, this_dl, &stext_options); + } + fz_catch(gctx) { + return NULL; + } + return (struct TextPage *) tp; + } + %pythoncode %{ + def __del__(self): + if not type(self) is DisplayList: return + self.__swig_destroy__(self) + %} + } +}; + +//----------------------------------------------------------------------------- +// fz_stext_page +//----------------------------------------------------------------------------- +struct TextPage { + %extend { + ~TextPage() + { + DEBUGMSG1("TextPage"); + fz_drop_stext_page(gctx, (fz_stext_page *) $self); + DEBUGMSG2; + } + + FITZEXCEPTION(TextPage, !result) + TextPage(PyObject *mediabox) + { + fz_stext_page *tp = NULL; + fz_try(gctx) { + tp = fz_new_stext_page(gctx, JM_rect_from_py(mediabox)); + } + fz_catch(gctx) { + return NULL; + } + return (struct TextPage *) tp; + } + + //--------------------------------------------------------------------- + // method search() + //--------------------------------------------------------------------- + FITZEXCEPTION(search, !result) + %pythonprepend search + %{"""Locate up to 'hit_max' 'needle' occurrences returning rects or quads."""%} + %pythonappend search %{ + if not val: + return val + newval = [] + for v in val: + q = Quad(v) + if quads: + newval.append(q) + else: + newval.append(q.rect) + val = newval + %} + PyObject *search(const char *needle, int hit_max=16, int quads=1) + { + fz_quad *result = NULL; + PyObject *liste = NULL; + int i, mymax = hit_max; + if (mymax < 1) mymax = 16; + fz_try(gctx) { + liste = PyList_New(0); + result = JM_Alloc(fz_quad, (mymax + 1)); + fz_quad *quad = (fz_quad *) result; + int count = fz_search_stext_page(gctx, (fz_stext_page *) $self, needle, result, hit_max); + for (i = 0; i < count; i++) { + LIST_APPEND_DROP(liste, JM_py_from_quad(*quad)); + quad += 1; + } + } + fz_always(gctx) { + JM_Free(result); + } + fz_catch(gctx) { + Py_CLEAR(liste); + return PyList_New(0); + } + return liste; + } + + + //--------------------------------------------------------------------- + // Get list of all blocks with block type and bbox as a Python list + //--------------------------------------------------------------------- + FITZEXCEPTION(_getNewBlockList, !result) + PyObject * + _getNewBlockList(PyObject *page_dict, int raw) + { + fz_try(gctx) { + JM_make_textpage_dict(gctx, (fz_stext_page *) $self, page_dict, raw); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + %pythoncode %{ + def _textpage_dict(self, raw = False): + page_dict = {"width": self.rect.width, "height": self.rect.height} + self._getNewBlockList(page_dict, raw) + return page_dict + %} + + + //--------------------------------------------------------------------- + // Get text blocks with their bbox and concatenated lines + // as a Python list + //--------------------------------------------------------------------- + FITZEXCEPTION(extractBLOCKS, !result) + %pythonprepend extractBLOCKS + %{"""Fill a given list with text block information."""%} + PyObject * + extractBLOCKS(PyObject *lines) + { + fz_stext_block *block; + fz_stext_line *line; + fz_stext_char *ch; + int block_n = 0; + PyObject *text = NULL, *litem; + fz_buffer *res = NULL; + fz_var(res); + fz_stext_page *this_tpage = (fz_stext_page *) $self; + + fz_try(gctx) { + res = fz_new_buffer(gctx, 1024); + for (block = this_tpage->first_block; block; block = block->next) { + fz_rect blockrect = block->bbox; + if (block->type == FZ_STEXT_BLOCK_TEXT) { + fz_clear_buffer(gctx, res); // set text buffer to empty + int line_n = 0; + float last_y0 = 0.0; + for (line = block->u.t.first_line; line; line = line->next) { + fz_rect linerect = line->bbox; + // append line no. 2 with new-line + if (line_n > 0) { + if (linerect.y0 != last_y0) + fz_append_string(gctx, res, "\n"); + else + fz_append_string(gctx, res, " "); + } + last_y0 = linerect.y0; + line_n++; + for (ch = line->first_char; ch; ch = ch->next) { + JM_append_rune(gctx, res, ch->c); + linerect = fz_union_rect(linerect, JM_char_bbox(line, ch)); + } + blockrect = fz_union_rect(blockrect, linerect); + } + text = JM_EscapeStrFromBuffer(gctx, res); + } else { + fz_image *img = block->u.i.image; + fz_colorspace *cs = img->colorspace; + text = PyUnicode_FromFormat("", fz_colorspace_name(gctx, cs), img->w, img->h, img->bpc); + blockrect = fz_union_rect(blockrect, block->bbox); + } + litem = PyTuple_New(7); + PyTuple_SET_ITEM(litem, 0, Py_BuildValue("f", blockrect.x0)); + PyTuple_SET_ITEM(litem, 1, Py_BuildValue("f", blockrect.y0)); + PyTuple_SET_ITEM(litem, 2, Py_BuildValue("f", blockrect.x1)); + PyTuple_SET_ITEM(litem, 3, Py_BuildValue("f", blockrect.y1)); + PyTuple_SET_ITEM(litem, 4, Py_BuildValue("O", text)); + PyTuple_SET_ITEM(litem, 5, Py_BuildValue("i", block_n)); + PyTuple_SET_ITEM(litem, 6, Py_BuildValue("i", block->type)); + LIST_APPEND_DROP(lines, litem); + Py_DECREF(text); + block_n++; + } + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + PyErr_Clear(); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + //--------------------------------------------------------------------- + // Get text words with their bbox + //--------------------------------------------------------------------- + FITZEXCEPTION(extractWORDS, !result) + %pythonprepend extractWORDS + %{"""Fill a list with text word information."""%} + PyObject * + extractWORDS(PyObject *lines) + { + fz_stext_block *block; + fz_stext_line *line; + fz_stext_char *ch; + fz_buffer *buff = NULL; + fz_var(buff); + size_t buflen = 0; + int block_n = 0, line_n, word_n; + fz_rect wbbox = {0,0,0,0}; // word bbox + fz_stext_page *this_tpage = (fz_stext_page *) $self; + + fz_try(gctx) { + buff = fz_new_buffer(gctx, 64); + for (block = this_tpage->first_block; block; block = block->next) { + if (block->type != FZ_STEXT_BLOCK_TEXT) { + block_n++; + continue; + } + line_n = 0; + for (line = block->u.t.first_line; line; line = line->next) { + word_n = 0; // word counter per line + fz_clear_buffer(gctx, buff); // reset word buffer + buflen = 0; // reset char counter + for (ch = line->first_char; ch; ch = ch->next) { + if (ch->c == 32 && buflen == 0) + continue; // skip spaces at line start + if (ch->c == 32) { + word_n = JM_append_word(gctx, lines, buff, &wbbox, + block_n, line_n, word_n); + fz_clear_buffer(gctx, buff); + buflen = 0; // reset char counter + continue; + } + // append one unicode character to the word + JM_append_rune(gctx, buff, ch->c); + buflen++; + // enlarge word bbox + wbbox = fz_union_rect(wbbox, JM_char_bbox(line, ch)); + } + if (buflen) { + word_n = JM_append_word(gctx, lines, buff, &wbbox, + block_n, line_n, word_n); + fz_clear_buffer(gctx, buff); + buflen = 0; + } + line_n++; + } + block_n++; + } + } + fz_always(gctx) { + fz_drop_buffer(gctx, buff); + PyErr_Clear(); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + //--------------------------------------------------------------------- + // TextPage rectangle + //--------------------------------------------------------------------- + %pythoncode %{@property%} + %pythonprepend rect + %{"""Page rectangle."""%} + %pythonappend rect %{val = Rect(val)%} + PyObject *rect() + { + fz_stext_page *this_tpage = (fz_stext_page *) $self; + fz_rect mediabox = this_tpage->mediabox; + return JM_py_from_rect(mediabox); + } + //--------------------------------------------------------------------- + // method _extractText() + //--------------------------------------------------------------------- + FITZEXCEPTION(_extractText, !result) + %newobject _extractText; + PyObject *_extractText(int format) + { + fz_buffer *res = NULL; + fz_output *out = NULL; + PyObject *text = NULL; + fz_var(res); + fz_var(out); + fz_stext_page *this_tpage = (fz_stext_page *) $self; + fz_try(gctx) { + res = fz_new_buffer(gctx, 1024); + out = fz_new_output_with_buffer(gctx, res); + switch(format) { + case(1): + fz_print_stext_page_as_html(gctx, out, this_tpage, 0); + break; + case(3): + fz_print_stext_page_as_xml(gctx, out, this_tpage, 0); + break; + case(4): + fz_print_stext_page_as_xhtml(gctx, out, this_tpage, 0); + break; + default: + JM_print_stext_page_as_text(gctx, out, this_tpage); + text = JM_EscapeStrFromBuffer(gctx, res); + break; + } + if (!text) text = JM_EscapeStrFromBuffer(gctx, res); + + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + fz_drop_output(gctx, out); + } + fz_catch(gctx) { + return NULL; + } + return text; + } + %pythoncode %{ + def extractText(self): + """Return simple, bare text on the page.""" + return self._extractText(0) + + def extractHTML(self): + """Return page content as a HTML string.""" + return self._extractText(1) + + def extractJSON(self): + """Return 'extractDICT' converted to JSON format.""" + import base64, json + val = self._textpage_dict(raw=False) + + class b64encode(json.JSONEncoder): + def default(self,s): + if not fitz_py2 and type(s) is bytes: + return base64.b64encode(s).decode() + if type(s) is bytearray: + if fitz_py2: + return base64.b64encode(s) + else: + return base64.b64encode(s).decode() + + val = json.dumps(val, separators=(",", ":"), cls=b64encode, indent=1) + + return val + + def extractXML(self): + """Return page content as a XML string.""" + return self._extractText(3) + + def extractXHTML(self): + """Return page content as a XHTML string.""" + return self._extractText(4) + + def extractDICT(self): + """Return page content as a Python dict of images and text spans.""" + return self._textpage_dict(raw=False) + + def extractRAWDICT(self): + """Return page content as a Python dict of images and text characters.""" + return self._textpage_dict(raw=True) + + def __del__(self): + if not type(self) is TextPage: return + self.__swig_destroy__(self) + %} + } +}; + +//----------------------------------------------------------------------------- +// Graftmap - only internally used for optimizing PDF object copy operations +//----------------------------------------------------------------------------- +struct Graftmap +{ + %extend + { + ~Graftmap() + { + DEBUGMSG1("Graftmap"); + pdf_drop_graft_map(gctx, (pdf_graft_map *) $self); + DEBUGMSG2; + } + + FITZEXCEPTION(Graftmap, !result) + Graftmap(struct Document *doc) + { + pdf_graft_map *map = NULL; + fz_try(gctx) { + pdf_document *dst = pdf_specifics(gctx, (fz_document *) doc); + ASSERT_PDF(dst); + map = pdf_new_graft_map(gctx, dst); + } + fz_catch(gctx) { + return NULL; + } + return (struct Graftmap *) map; + } + %pythoncode %{ + def __del__(self): + if not type(self) is Graftmap: + return + self.__swig_destroy__(self) + %} + } +}; + + +//----------------------------------------------------------------------------- +// TextWriter +//----------------------------------------------------------------------------- +struct TextWriter +{ + %extend { + ~TextWriter() + { + DEBUGMSG1("TextWriter"); + fz_drop_text(gctx, (fz_text *) $self); + DEBUGMSG2; + } + + FITZEXCEPTION(TextWriter, !result) + %pythonprepend TextWriter + %{"""Stores text spans for later output on compatible PDF pages."""%} + %pythonappend TextWriter %{ + self.opacity = opacity + self.color = color + self.rect = Rect(page_rect) + self.ctm = Matrix(1, 0, 0, -1, 0, self.rect.height) + self.ictm = ~self.ctm + self.lastPoint = Point() + self.lastPoint.__doc__ = "Position following last text insertion." + self.textRect = Rect(0, 0, -1, -1) + self.textRect.__doc__ = "Accumulated area of text spans." + self.used_fonts = set() + %} + TextWriter(PyObject *page_rect, int opacity=1, PyObject *color=NULL ) + { + fz_text *text = NULL; + fz_try(gctx) { + text = fz_new_text(gctx); + } + fz_catch(gctx) { + return NULL; + } + return (struct TextWriter *) text; + } + + FITZEXCEPTION(append, !result) + %pythonprepend append %{ + """Store 'text' at point 'pos' using 'font' and 'fontsize'.""" + + pos = Point(pos) * self.ictm + if font is None: + font = Font("helv")%} + %pythonappend append %{ + self.lastPoint = Point(val[-2:]) * self.ctm + self.textRect = self._bbox * self.ctm + val = self.textRect, self.lastPoint + if font.flags["mono"] == 1: + self.used_fonts.add(font) + %} + PyObject * + append(PyObject *pos, char *text, struct Font *font=NULL, float fontsize=11, char *language=NULL, int wmode=0, int bidi_level=0) + { + fz_text_language lang = fz_text_language_from_string(language); + fz_bidi_direction markup_dir = 0; + fz_point p = JM_point_from_py(pos); + fz_matrix trm = fz_make_matrix(fontsize, 0, 0, fontsize, p.x, p.y); + fz_try(gctx) { + trm = fz_show_string(gctx, (fz_text *) $self, (fz_font *) font, trm, text, wmode, bidi_level, markup_dir, lang); + } + fz_catch(gctx) { + return NULL; + } + return JM_py_from_matrix(trm); + } + + %pythoncode %{@property%} + %pythonappend _bbox%{val = Rect(val)%} + PyObject *_bbox() + { + return JM_py_from_rect(fz_bound_text(gctx, (fz_text *) $self, NULL, fz_identity)); + } + + FITZEXCEPTION(writeText, !result) + %pythonprepend writeText%{ + """Write the text to a PDF page having the TextWriter's page size. + + Args: + page: a PDF page having same size. + color: override text color. + opacity: override transparency. + overlay: put in foreground or background. + morph: tuple(Point, Matrix), apply Matrix with fixpoint Point. + render_mode: (int) PDF render mode operator 'Tr'. + """ + + CheckParent(page) + if abs(self.rect - page.rect) > 1e-3: + raise ValueError("incompatible page rect") + if morph != None: + if (type(morph) not in (tuple, list) + or type(morph[0]) is not Point + or type(morph[1]) is not Matrix + ): + raise ValueError("morph must be (Point, Matrix) or None") + if getattr(opacity, "__float__", None) is None: + opacity = self.opacity + if color is None: + color = self.color + %} + %pythonappend writeText%{ + max_nums = val[0] + content = val[1] + max_alp, max_font = max_nums + old_cont_lines = content.splitlines() + + new_cont_lines = ["q"] + + if morph: + p = morph[0] * self.ictm + delta = Matrix(1, 1).preTranslate(p.x, p.y) + matrix = ~delta * morph[1] * delta + new_cont_lines.append("%g %g %g %g %g %g cm" % JM_TUPLE(matrix)) + + for line in old_cont_lines: + if line.endswith(" cm"): + continue + if line == "BT": + new_cont_lines.append(line) + new_cont_lines.append("%i Tr" % render_mode) + continue + if line.endswith(" gs"): + alp = int(line.split()[0][4:]) + max_alp + line = "/Alp%i gs" % alp + elif line.endswith(" Tf"): + temp = line.split() + font = int(temp[0][2:]) + max_font + line = " ".join(["/F%i" % font] + temp[1:]) + elif line.endswith(" rg"): + new_cont_lines.append(line.replace("rg", "RG")) + elif line.endswith(" g"): + new_cont_lines.append(line.replace(" g", " G")) + elif line.endswith(" k"): + new_cont_lines.append(line.replace(" k", " K")) + new_cont_lines.append(line) + new_cont_lines.append("Q\n") + content = "\n".join(new_cont_lines).encode("utf-8") + TOOLS._insert_contents(page, content, overlay=overlay) + val = None + for font in self.used_fonts: + repair_mono_font(page, font) + %} + PyObject *writeText(struct Page *page, PyObject *color=NULL, float opacity=-1, int overlay=1, PyObject *morph=NULL, int render_mode=0) + { + pdf_page *pdfpage = pdf_page_from_fz_page(gctx, (fz_page *) page); + fz_rect mediabox = fz_bound_page(gctx, (fz_page *) page); + pdf_obj *resources = NULL; + fz_buffer *contents = NULL; + fz_device *dev = NULL; + PyObject *result = NULL, *max_nums, *cont_string; + float alpha = 1; + if (opacity >= 0 && opacity < 1) + alpha = opacity; + fz_colorspace *colorspace; + int ncol = 1; + float dev_color[4] = {0, 0, 0, 0}; + if (color) JM_color_FromSequence(color, &ncol, dev_color); + switch(ncol) { + case 3: colorspace = fz_device_rgb(gctx); break; + case 4: colorspace = fz_device_cmyk(gctx); break; + default: colorspace = fz_device_gray(gctx); break; + } + + fz_try(gctx) { + ASSERT_PDF(pdfpage); + resources = pdf_new_dict(gctx, pdfpage->doc, 5); + contents = fz_new_buffer(gctx, 1024); + dev = pdf_new_pdf_device(gctx, pdfpage->doc, fz_identity, + mediabox, resources, contents); + fz_fill_text(gctx, dev, (fz_text *) $self, fz_identity, + colorspace, dev_color, alpha, fz_default_color_params); + fz_close_device(gctx, dev); + + // copy generated resources into the one of the page + max_nums = JM_merge_resources(gctx, pdfpage, resources); + cont_string = JM_EscapeStrFromBuffer(gctx, contents); + result = Py_BuildValue("OO", max_nums, cont_string); + Py_DECREF(cont_string); + Py_DECREF(max_nums); + } + fz_always(gctx) { + fz_drop_buffer(gctx, contents); + pdf_drop_obj(gctx, resources); + fz_drop_device(gctx, dev); + } + fz_catch(gctx) { + return NULL; + } + return result; + } + %pythoncode %{ + def __del__(self): + if not type(self) is TextWriter: + return + self.__swig_destroy__(self) + %} + } +}; + + +//----------------------------------------------------------------------------- +// Font +//----------------------------------------------------------------------------- +struct Font +{ + %extend + { + ~Font() + { + DEBUGMSG1("Font"); + fz_drop_font(gctx, (fz_font *) $self); + DEBUGMSG2; + } + + FITZEXCEPTION(Font, !result) + %pythonprepend Font %{ + if fontname: + if "/" in fontname or "\\" in fontname: + print("Warning: did you mean fontfile?") + try: + ordering = ("china-t", "china-s", "japan", "korea","china-ts", "china-ss", "japan-s", "korea-s").index(fontname.lower()) % 4 + except ValueError: + ordering = -1 + if fontname.lower().startswith(("fig", "fim")): + try: + import pymupdf_fonts # optional fonts + fontbuffer = pymupdf_fonts.myfont(fontname)[:] # make a copy + fontname = None # ensure using fontbuffer only + del pymupdf_fonts # remove package again + except Exception as exc: + if repr(exc).startswith(("ImportError", "AttributeError")): + raise ImportError("Optional package 'pymupdf_fonts' not installed") + else: + raise exc + elif ordering < 0: + fontname = Base14_fontdict.get(fontname.lower(), fontname) + %} + Font(char *fontname=NULL, char *fontfile=NULL, + PyObject *fontbuffer=NULL, int script=0, + char *language=NULL, int ordering=-1, int is_bold=0, + int is_italic=0, int is_serif=0) + { + fz_font *font = NULL; + fz_try(gctx) { + fz_text_language lang = fz_text_language_from_string(language); + font = JM_get_font(gctx, fontname, fontfile, + fontbuffer, script, lang, ordering, + is_bold, is_italic, is_serif); + } + fz_catch(gctx) { + return NULL; + } + return (struct Font *) font; + } + + %pythonprepend unicode_to_glyph_name + %{"""Return the glyph name of a unicode."""%} + PyObject *unicode_to_glyph_name(int c, char *language=NULL, int script=0) + { + fz_font *font; + fz_text_language lang = fz_text_language_from_string(language); + char name[32]; + int gid = fz_encode_character_with_fallback(gctx, (fz_font *) $self, c, script, lang, &font); + fz_get_glyph_name(gctx, font, gid, name, sizeof(name)); + return Py_BuildValue("s", name); + } + + + %pythonprepend glyph_name_to_unicode + %{"""Return the unicode for a glyph name."""%} + PyObject *glyph_name_to_unicode(const char *name) + { + return Py_BuildValue("i", fz_unicode_from_glyph_name(name)); + } + + + %pythonprepend glyph_advance + %{"""Return the glyph width of a unicode."""%} + float glyph_advance(int chr, char *language=NULL, int script=0, int wmode=0) + { + fz_font *font; + fz_text_language lang = fz_text_language_from_string(language); + int gid = fz_encode_character_with_fallback(gctx, (fz_font *) $self, chr, script, lang, &font); + return fz_advance_glyph(gctx, font, gid, wmode); + } + + %pythonprepend has_glyph + %{"""Return whether font has a glyph for this unicode."""%} + PyObject *has_glyph(int chr, char *language=NULL, int script=0) + { + fz_font *font; + fz_text_language lang = fz_text_language_from_string(language); + int gid = fz_encode_character_with_fallback(gctx, (fz_font *) $self, chr, script, lang, &font); + if (gid > 0) Py_RETURN_TRUE; + Py_RETURN_FALSE; + } + + + %pythoncode %{@property%} + PyObject *flags() + { + fz_font_flags_t *f = fz_font_flags((fz_font *) $self); + if (!f) Py_RETURN_NONE; + return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i}", + "mono", f->is_mono, "serif", f->is_serif, "bold", f->is_bold, + "italic", f->is_italic, "substitute", f->ft_substitute, + "stretch", f->ft_stretch, "fake-bold", f->fake_bold, + "fake-italic", f->fake_italic, "opentype", f->has_opentype, + "invalid-bbox", f->invalid_bbox); + } + + + %pythoncode %{@property%} + PyObject *name() + { + return JM_UnicodeFromStr(fz_font_name(gctx, (fz_font *) $self)); + } + + %pythoncode %{@property%} + int glyph_count() + { + fz_font *this_font = (fz_font *) $self; + return this_font->glyph_count; + } + + %pythoncode %{@property%} + %pythonappend bbox%{val = Rect(val)%} + PyObject *bbox() + { + fz_font *this_font = (fz_font *) $self; + return JM_py_from_rect(fz_font_bbox(gctx, this_font)); + } + + %pythoncode %{ + def text_length(self, text, fontsize=11, wmode=0): + """Calculate the length of a string for this font.""" + return fontsize * sum([self.glyph_advance(ord(c), wmode=wmode) for c in text]) + + def __repr__(self): + return "Font('%s')" % self.name + + def __del__(self): + if type(self) is not Font: + return None + self.__swig_destroy__(self) + %} + } +}; + + +//----------------------------------------------------------------------------- +// Tools - a collection of tools and utilities +//----------------------------------------------------------------------------- +struct Tools +{ + %extend + { + %pythonprepend gen_id + %{"""Return a unique positive integer."""%} + PyObject *gen_id() + { + JM_UNIQUE_ID += 1; + if (JM_UNIQUE_ID < 0) JM_UNIQUE_ID = 1; + return Py_BuildValue("i", JM_UNIQUE_ID); + } + + FITZEXCEPTION(set_icc, !result) + %pythonprepend set_icc + %{"""Set ICC color handling on or off."""%} + PyObject *set_icc(int on=0) + { + fz_try(gctx) { + if (on) { + if (FZ_ENABLE_ICC) + fz_enable_icc(gctx); + else + THROWMSG("PyMuPDF generated without ICC components."); + } + else if (FZ_ENABLE_ICC) { + fz_disable_icc(gctx); + } + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + + %pythonprepend store_shrink + %{"""Free 'percent' of current store size."""%} + PyObject *store_shrink(int percent) + { + if (percent >= 100) + { + fz_empty_store(gctx); + return Py_BuildValue("i", 0); + } + if (percent > 0) fz_shrink_store(gctx, 100 - percent); + return Py_BuildValue("i", (int) gctx->store->size); + } + + + %pythoncode%{@property%} + %pythonprepend store_size + %{"""MuPDF current store size."""%} + PyObject *store_size() + { + return Py_BuildValue("i", (int) gctx->store->size); + } + + + %pythoncode%{@property%} + %pythonprepend store_maxsize + %{"""MuPDF store size limit."""%} + PyObject *store_maxsize() + { + return Py_BuildValue("i", (int) gctx->store->max); + } + + + %pythonprepend show_aa_level + %{"""Show anti-aliasing values."""%} + %pythonappend show_aa_level %{ + temp = {"graphics": val[0], "text": val[1], "graphics_min_line_width": val[2]} + val = temp%} + PyObject *show_aa_level() + { + return Py_BuildValue("iif", + fz_graphics_aa_level(gctx), + fz_text_aa_level(gctx), + fz_graphics_min_line_width(gctx)); + } + + + %pythonprepend set_aa_level + %{"""Set anti-aliasing level."""%} + void set_aa_level(int level) + { + fz_set_aa_level(gctx, level); + } + + + %pythonprepend set_graphics_min_line_width + %{"""Set the graphics minimum line width."""%} + void set_graphics_min_line_width(float min_line_width) + { + fz_set_graphics_min_line_width(gctx, min_line_width); + } + + + %pythonprepend image_profile + %{"""Metadata of an image binary stream."""%} + PyObject *image_profile(PyObject *stream, int keep_image=0) + { + return JM_image_profile(gctx, stream, keep_image); + } + + + PyObject *_rotate_matrix(struct Page *page) + { + pdf_page *pdfpage = pdf_page_from_fz_page(gctx, (fz_page *) page); + if (!pdfpage) return JM_py_from_matrix(fz_identity); + return JM_py_from_matrix(JM_rotate_page_matrix(gctx, pdfpage)); + } + + + PyObject *_derotate_matrix(struct Page *page) + { + pdf_page *pdfpage = pdf_page_from_fz_page(gctx, (fz_page *) page); + if (!pdfpage) return JM_py_from_matrix(fz_identity); + return JM_py_from_matrix(JM_derotate_page_matrix(gctx, pdfpage)); + } + + + %pythoncode%{@property%} + %pythonprepend fitz_config + %{"""PyMuPDF configuration parameters."""%} + PyObject *fitz_config() + { + return JM_fitz_config(); + } + + + %pythonprepend glyph_cache_empty + %{"""Empty the glyph cache."""%} + void glyph_cache_empty() + { + fz_purge_glyph_cache(gctx); + } + + + FITZEXCEPTION(_fill_widget, !result) + %pythonappend _fill_widget %{ + widget.rect = Rect(annot.rect) + widget.xref = annot.xref + widget.parent = annot.parent + widget._annot = annot # backpointer to annot object + if not widget.script: + widget.script = None + if not widget.script_stroke: + widget.script_stroke = None + if not widget.script_format: + widget.script_format = None + if not widget.script_change: + widget.script_change = None + if not widget.script_calc: + widget.script_calc = None + %} + PyObject *_fill_widget(struct Annot *annot, PyObject *widget) + { + fz_try(gctx) { + JM_get_widget_properties(gctx, (pdf_annot *) annot, widget); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + + FITZEXCEPTION(_save_widget, !result) + PyObject *_save_widget(struct Annot *annot, PyObject *widget) + { + fz_try(gctx) { + JM_set_widget_properties(gctx, (pdf_annot *) annot, widget); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + + FITZEXCEPTION(_reset_widget, !result) + PyObject *_reset_widget(struct Annot *annot) + { + fz_try(gctx) { + pdf_annot *this_annot = (pdf_annot *) annot; + pdf_document *pdf = pdf_get_bound_document(gctx, this_annot->obj); + pdf_field_reset(gctx, pdf, this_annot->obj); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + + FITZEXCEPTION(_parse_da, !result) + %pythonappend _parse_da %{ + if not val: + return ((0,), "", 0) + font = "Helv" + fsize = 12 + col = (0, 0, 0) + dat = val.split() # split on any whitespace + for i, item in enumerate(dat): + if item == "Tf": + font = dat[i - 2][1:] + fsize = float(dat[i - 1]) + dat[i] = dat[i-1] = dat[i-2] = "" + continue + if item == "g": # unicolor text + col = [(float(dat[i - 1]))] + dat[i] = dat[i-1] = "" + continue + if item == "rg": # RGB colored text + col = [float(f) for f in dat[i - 3:i]] + dat[i] = dat[i-1] = dat[i-2] = dat[i-3] = "" + continue + if item == "k": # CMYK colored text + col = [float(f) for f in dat[i - 4:i]] + dat[i] = dat[i-1] = dat[i-2] = dat[i-3] = dat[i-4] = "" + continue + + val = (col, font, fsize) + %} + PyObject *_parse_da(struct Annot *annot) + { + char *da_str = NULL; + pdf_annot *this_annot = (pdf_annot *) annot; + fz_try(gctx) { + pdf_obj *da = pdf_dict_get_inheritable(gctx, this_annot->obj, + PDF_NAME(DA)); + if (!da) { + pdf_obj *trailer = pdf_trailer(gctx, this_annot->page->doc); + da = pdf_dict_getl(gctx, trailer, PDF_NAME(Root), + PDF_NAME(AcroForm), + PDF_NAME(DA), + NULL); + } + da_str = (char *) pdf_to_text_string(gctx, da); + } + fz_catch(gctx) { + return NULL; + } + return JM_UnicodeFromStr(da_str); + } + + + PyObject *_update_da(struct Annot *annot, char *da_str) + { + fz_try(gctx) { + pdf_annot *this_annot = (pdf_annot *) annot; + pdf_dict_put_text_string(gctx, this_annot->obj, PDF_NAME(DA), da_str); + pdf_dict_del(gctx, this_annot->obj, PDF_NAME(DS)); /* not supported */ + pdf_dict_del(gctx, this_annot->obj, PDF_NAME(RC)); /* not supported */ + pdf_dirty_annot(gctx, this_annot); + } + fz_catch(gctx) { + return NULL; + } + return_none; + } + + + FITZEXCEPTION(_get_all_contents, !result) + %pythonprepend _get_all_contents + %{"""Concatenate all /Contents objects of a page into a bytes object."""%} + PyObject *_get_all_contents(struct Page *fzpage) + { + pdf_page *page = pdf_page_from_fz_page(gctx, (fz_page *) fzpage); + fz_buffer *res = NULL; + PyObject *result = NULL; + fz_try(gctx) { + ASSERT_PDF(page); + res = JM_read_contents(gctx, page->obj); + result = JM_BinFromBuffer(gctx, res); + } + fz_always(gctx) { + fz_drop_buffer(gctx, res); + } + fz_catch(gctx) { + return NULL; + } + return result; + } + + + FITZEXCEPTION(_insert_contents, !result) + %pythonprepend _insert_contents + %{"""Add bytes as a new /Contents object for a page, and return its xref."""%} + PyObject *_insert_contents(struct Page *page, PyObject *newcont, int overlay=1) + { + fz_buffer *contbuf = NULL; + int xref = 0; + pdf_page *pdfpage = pdf_page_from_fz_page(gctx, (fz_page *) page); + fz_try(gctx) { + ASSERT_PDF(pdfpage); + contbuf = JM_BufferFromBytes(gctx, newcont); + xref = JM_insert_contents(gctx, pdfpage->doc, pdfpage->obj, contbuf, overlay); + pdfpage->doc->dirty = 1; + } + fz_always(gctx) { + fz_drop_buffer(gctx, contbuf); + } + fz_catch(gctx) { + return NULL; + } + return Py_BuildValue("i", xref); + } + + %pythonprepend mupdf_version + %{"""Get version of MuPDF binary build."""%} + PyObject *mupdf_version() + { + return Py_BuildValue("s", FZ_VERSION); + } + + %pythonprepend mupdf_warnings + %{"""Get the MuPDF warnings/errors with optional reset (default)."""%} + %pythonappend mupdf_warnings %{ + val = "\n".join(val) + if reset: + self.reset_mupdf_warnings()%} + PyObject *mupdf_warnings(int reset=1) + { + Py_INCREF(JM_mupdf_warnings_store); + return JM_mupdf_warnings_store; + } + + int _int_from_language(char *language) + { + return fz_text_language_from_string(language); + } + + %pythonprepend reset_mupdf_warnings + %{"""Empty the MuPDF warnings/errors store."""%} + void reset_mupdf_warnings() + { + Py_CLEAR(JM_mupdf_warnings_store); + JM_mupdf_warnings_store = PyList_New(0); + } + + %pythonprepend mupdf_display_errors + %{"""Set MuPDF error display to True or False."""%} + PyObject *mupdf_display_errors(PyObject *value = NULL) + { + if (value == Py_True) + JM_mupdf_show_errors = Py_True; + else if (value == Py_False) + JM_mupdf_show_errors = Py_False; + Py_INCREF(JM_mupdf_show_errors); + return JM_mupdf_show_errors; + } + + PyObject *_transform_rect(PyObject *rect, PyObject *matrix) + { + return JM_py_from_rect(fz_transform_rect(JM_rect_from_py(rect), JM_matrix_from_py(matrix))); + } + + PyObject *_intersect_rect(PyObject *r1, PyObject *r2) + { + return JM_py_from_rect(fz_intersect_rect(JM_rect_from_py(r1), + JM_rect_from_py(r2))); + } + + PyObject *_include_point_in_rect(PyObject *r, PyObject *p) + { + return JM_py_from_rect(fz_include_point_in_rect(JM_rect_from_py(r), + JM_point_from_py(p))); + } + + PyObject *_transform_point(PyObject *point, PyObject *matrix) + { + return JM_py_from_point(fz_transform_point(JM_point_from_py(point), JM_matrix_from_py(matrix))); + } + + PyObject *_union_rect(PyObject *r1, PyObject *r2) + { + return JM_py_from_rect(fz_union_rect(JM_rect_from_py(r1), + JM_rect_from_py(r2))); + } + + PyObject *_concat_matrix(PyObject *m1, PyObject *m2) + { + return JM_py_from_matrix(fz_concat(JM_matrix_from_py(m1), + JM_matrix_from_py(m2))); + } + + PyObject *_invert_matrix(PyObject *matrix) + { + fz_matrix src = JM_matrix_from_py(matrix); + float a = src.a; + float det = a * src.d - src.b * src.c; + if (det < -FLT_EPSILON || det > FLT_EPSILON) + { + fz_matrix dst; + float rdet = 1 / det; + dst.a = src.d * rdet; + dst.b = -src.b * rdet; + dst.c = -src.c * rdet; + dst.d = a * rdet; + a = -src.e * dst.a - src.f * dst.c; + dst.f = -src.e * dst.b - src.f * dst.d; + dst.e = a; + return Py_BuildValue("(i, O)", 0, JM_py_from_matrix(dst)); + } + return Py_BuildValue("(i, ())", 1); + } + + + float _measure_string(const char *text, const char *fontname, float fontsize, + int encoding = 0) + { + fz_font *font = fz_new_base14_font(gctx, fontname); + float w = 0; + while (*text) + { + int c, g; + text += fz_chartorune(&c, text); + switch (encoding) + { + case PDF_SIMPLE_ENCODING_GREEK: + c = fz_iso8859_7_from_unicode(c); break; + case PDF_SIMPLE_ENCODING_CYRILLIC: + c = fz_windows_1251_from_unicode(c); break; + default: + c = fz_windows_1252_from_unicode(c); break; + } + if (c < 0) c = 0xB7; + g = fz_encode_character(gctx, font, c); + w += fz_advance_glyph(gctx, font, g, 0); + } + return w * fontsize; + } + + PyObject * + _sine_between(PyObject *C, PyObject *P, PyObject *Q) + { + // calculate the sine between lines CP and QP + fz_point c = JM_point_from_py(C); + fz_point p = JM_point_from_py(P); + fz_point q = JM_point_from_py(Q); + fz_point s = fz_normalize_vector(fz_make_point(q.x - p.x, q.y - p.y)); + fz_matrix m1 = fz_make_matrix(1, 0, 0, 1, -p.x, -p.y); + fz_matrix m2 = fz_make_matrix(s.x, -s.y, s.y, s.x, 0, 0); + m1 = fz_concat(m1, m2); + c = fz_transform_point(c, m1); + c = fz_normalize_vector(c); + return Py_BuildValue("f", c.y); + } + + PyObject * + _hor_matrix(PyObject *C, PyObject *P) + { + // calculate matrix m that maps the line from C to P to the x-axis, + // such that C * m = (0, 0), and the target line has same length. + fz_point c = JM_point_from_py(C); + fz_point p = JM_point_from_py(P); + fz_point s = fz_normalize_vector(fz_make_point(p.x - c.x, p.y - c.y)); + fz_matrix m1 = fz_make_matrix(1, 0, 0, 1, -c.x, -c.y); + fz_matrix m2 = fz_make_matrix(s.x, -s.y, s.y, s.x, 0, 0); + return JM_py_from_matrix(fz_concat(m1, m2)); + } + + + FITZEXCEPTION(set_font_width, !result) + PyObject * + set_font_width(struct Document *doc, int xref, int width) + { + pdf_document *pdf = pdf_specifics(gctx, (fz_document *) doc); + if (!pdf) Py_RETURN_FALSE; + pdf_obj *font=NULL, *dfonts=NULL; + fz_try(gctx) { + font = pdf_load_object(gctx, pdf, xref); + dfonts = pdf_dict_get(gctx, font, PDF_NAME(DescendantFonts)); + if (pdf_is_array(gctx, dfonts)) { + int i, n = pdf_array_len(gctx, dfonts); + for (i = 0; i < n; i++) { + pdf_obj *dfont = pdf_array_get(gctx, dfonts, i); + pdf_obj *warray = pdf_new_array(gctx, pdf, 3); + pdf_array_push(gctx, warray, pdf_new_int(gctx, 0)); + pdf_array_push(gctx, warray, pdf_new_int(gctx, 65532)); + pdf_array_push(gctx, warray, pdf_new_int(gctx, width)); + pdf_dict_put_drop(gctx, dfont, PDF_NAME(W), warray); + } + } + } + fz_catch(gctx) { + return NULL; + } + Py_RETURN_TRUE; + } + + + %pythoncode %{ +def _le_annot_parms(self, annot, p1, p2, fill_color): + """Get common parameters for making line end symbols. + + Returns: + m: matrix that maps p1, p2 to points L, P on the x-axis + im: its inverse + L, P: transformed p1, p2 + w: line width + scol: stroke color string + fcol: fill color store_shrink + opacity: opacity string (gs command) + """ + w = annot.border["width"] # line width + sc = annot.colors["stroke"] # stroke color + if not sc: # black if missing + sc = (0,0,0) + scol = " ".join(map(str, sc)) + " RG\n" + if fill_color: + fc = fill_color + else: + fc = annot.colors["fill"] # fill color + if not fc: + fc = (1,1,1) # white if missing + fcol = " ".join(map(str, fc)) + " rg\n" + # nr = annot.rect + np1 = p1 # point coord relative to annot rect + np2 = p2 # point coord relative to annot rect + m = Matrix(self._hor_matrix(np1, np2)) # matrix makes the line horizontal + im = ~m # inverted matrix + L = np1 * m # converted start (left) point + R = np2 * m # converted end (right) point + if 0 <= annot.opacity < 1: + opacity = "/H gs\n" + else: + opacity = "" + return m, im, L, R, w, scol, fcol, opacity + +def _oval_string(self, p1, p2, p3, p4): + """Return /AP string defining an oval within a 4-polygon provided as points + """ + def bezier(p, q, r): + f = "%f %f %f %f %f %f c\n" + return f % (p.x, p.y, q.x, q.y, r.x, r.y) + + kappa = 0.55228474983 # magic number + ml = p1 + (p4 - p1) * 0.5 # middle points ... + mo = p1 + (p2 - p1) * 0.5 # for each ... + mr = p2 + (p3 - p2) * 0.5 # polygon ... + mu = p4 + (p3 - p4) * 0.5 # side + ol1 = ml + (p1 - ml) * kappa # the 8 bezier + ol2 = mo + (p1 - mo) * kappa # helper points + or1 = mo + (p2 - mo) * kappa + or2 = mr + (p2 - mr) * kappa + ur1 = mr + (p3 - mr) * kappa + ur2 = mu + (p3 - mu) * kappa + ul1 = mu + (p4 - mu) * kappa + ul2 = ml + (p4 - ml) * kappa + # now draw, starting from middle point of left side + ap = "%f %f m\n" % (ml.x, ml.y) + ap += bezier(ol1, ol2, mo) + ap += bezier(or1, or2, mr) + ap += bezier(ur1, ur2, mu) + ap += bezier(ul1, ul2, ml) + return ap + +def _le_diamond(self, annot, p1, p2, lr, fill_color): + """Make stream commands for diamond line end symbol. "lr" denotes left (False) or right point. + """ + m, im, L, R, w, scol, fcol, opacity = self._le_annot_parms(annot, p1, p2, fill_color) + shift = 2.5 # 2*shift*width = length of square edge + d = shift * max(1, w) + M = R - (d/2., 0) if lr else L + (d/2., 0) + r = Rect(M, M) + (-d, -d, d, d) # the square + # the square makes line longer by (2*shift - 1)*width + p = (r.tl + (r.bl - r.tl) * 0.5) * im + ap = "q\n%s%f %f m\n" % (opacity, p.x, p.y) + p = (r.tl + (r.tr - r.tl) * 0.5) * im + ap += "%f %f l\n" % (p.x, p.y) + p = (r.tr + (r.br - r.tr) * 0.5) * im + ap += "%f %f l\n" % (p.x, p.y) + p = (r.br + (r.bl - r.br) * 0.5) * im + ap += "%f %f l\n" % (p.x, p.y) + ap += "%g w\n" % w + ap += scol + fcol + "b\nQ\n" + return ap + +def _le_square(self, annot, p1, p2, lr, fill_color): + """Make stream commands for square line end symbol. "lr" denotes left (False) or right point. + """ + m, im, L, R, w, scol, fcol, opacity = self._le_annot_parms(annot, p1, p2, fill_color) + shift = 2.5 # 2*shift*width = length of square edge + d = shift * max(1, w) + M = R - (d/2., 0) if lr else L + (d/2., 0) + r = Rect(M, M) + (-d, -d, d, d) # the square + # the square makes line longer by (2*shift - 1)*width + p = r.tl * im + ap = "q\n%s%f %f m\n" % (opacity, p.x, p.y) + p = r.tr * im + ap += "%f %f l\n" % (p.x, p.y) + p = r.br * im + ap += "%f %f l\n" % (p.x, p.y) + p = r.bl * im + ap += "%f %f l\n" % (p.x, p.y) + ap += "%g w\n" % w + ap += scol + fcol + "b\nQ\n" + return ap + +def _le_circle(self, annot, p1, p2, lr, fill_color): + """Make stream commands for circle line end symbol. "lr" denotes left (False) or right point. + """ + m, im, L, R, w, scol, fcol, opacity = self._le_annot_parms(annot, p1, p2, fill_color) + shift = 2.5 # 2*shift*width = length of square edge + d = shift * max(1, w) + M = R - (d/2., 0) if lr else L + (d/2., 0) + r = Rect(M, M) + (-d, -d, d, d) # the square + ap = "q\n" + opacity + self._oval_string(r.tl * im, r.tr * im, r.br * im, r.bl * im) + ap += "%g w\n" % w + ap += scol + fcol + "b\nQ\n" + return ap + +def _le_butt(self, annot, p1, p2, lr, fill_color): + """Make stream commands for butt line end symbol. "lr" denotes left (False) or right point. + """ + m, im, L, R, w, scol, fcol, opacity = self._le_annot_parms(annot, p1, p2, fill_color) + shift = 3 + d = shift * max(1, w) + M = R if lr else L + top = (M + (0, -d/2.)) * im + bot = (M + (0, d/2.)) * im + ap = "\nq\n%s%f %f m\n" % (opacity, top.x, top.y) + ap += "%f %f l\n" % (bot.x, bot.y) + ap += "%g w\n" % w + ap += scol + "s\nQ\n" + return ap + +def _le_slash(self, annot, p1, p2, lr, fill_color): + """Make stream commands for slash line end symbol. "lr" denotes left (False) or right point. + """ + m, im, L, R, w, scol, fcol, opacity = self._le_annot_parms(annot, p1, p2, fill_color) + rw = 1.1547 * max(1, w) * 1.0 # makes rect diagonal a 30 deg inclination + M = R if lr else L + r = Rect(M.x - rw, M.y - 2 * w, M.x + rw, M.y + 2 * w) + top = r.tl * im + bot = r.br * im + ap = "\nq\n%s%f %f m\n" % (opacity, top.x, top.y) + ap += "%f %f l\n" % (bot.x, bot.y) + ap += "%g w\n" % w + ap += scol + "s\nQ\n" + return ap + +def _le_openarrow(self, annot, p1, p2, lr, fill_color): + """Make stream commands for open arrow line end symbol. "lr" denotes left (False) or right point. + """ + m, im, L, R, w, scol, fcol, opacity = self._le_annot_parms(annot, p1, p2, fill_color) + shift = 2.5 + d = shift * max(1, w) + p2 = R + (d/2., 0) if lr else L - (d/2., 0) + p1 = p2 + (-2*d, -d) if lr else p2 + (2*d, -d) + p3 = p2 + (-2*d, d) if lr else p2 + (2*d, d) + p1 *= im + p2 *= im + p3 *= im + ap = "\nq\n%s%f %f m\n" % (opacity, p1.x, p1.y) + ap += "%f %f l\n" % (p2.x, p2.y) + ap += "%f %f l\n" % (p3.x, p3.y) + ap += "%g w\n" % w + ap += scol + "S\nQ\n" + return ap + +def _le_closedarrow(self, annot, p1, p2, lr, fill_color): + """Make stream commands for closed arrow line end symbol. "lr" denotes left (False) or right point. + """ + m, im, L, R, w, scol, fcol, opacity = self._le_annot_parms(annot, p1, p2, fill_color) + shift = 2.5 + d = shift * max(1, w) + p2 = R + (d/2., 0) if lr else L - (d/2., 0) + p1 = p2 + (-2*d, -d) if lr else p2 + (2*d, -d) + p3 = p2 + (-2*d, d) if lr else p2 + (2*d, d) + p1 *= im + p2 *= im + p3 *= im + ap = "\nq\n%s%f %f m\n" % (opacity, p1.x, p1.y) + ap += "%f %f l\n" % (p2.x, p2.y) + ap += "%f %f l\n" % (p3.x, p3.y) + ap += "%g w\n" % w + ap += scol + fcol + "b\nQ\n" + return ap + +def _le_ropenarrow(self, annot, p1, p2, lr, fill_color): + """Make stream commands for right open arrow line end symbol. "lr" denotes left (False) or right point. + """ + m, im, L, R, w, scol, fcol, opacity = self._le_annot_parms(annot, p1, p2, fill_color) + shift = 2.5 + d = shift * max(1, w) + p2 = R - (d/3., 0) if lr else L + (d/3., 0) + p1 = p2 + (2*d, -d) if lr else p2 + (-2*d, -d) + p3 = p2 + (2*d, d) if lr else p2 + (-2*d, d) + p1 *= im + p2 *= im + p3 *= im + ap = "\nq\n%s%f %f m\n" % (opacity, p1.x, p1.y) + ap += "%f %f l\n" % (p2.x, p2.y) + ap += "%f %f l\n" % (p3.x, p3.y) + ap += "%g w\n" % w + ap += scol + fcol + "S\nQ\n" + return ap + +def _le_rclosedarrow(self, annot, p1, p2, lr, fill_color): + """Make stream commands for right closed arrow line end symbol. "lr" denotes left (False) or right point. + """ + m, im, L, R, w, scol, fcol, opacity = self._le_annot_parms(annot, p1, p2, fill_color) + shift = 2.5 + d = shift * max(1, w) + p2 = R - (2*d, 0) if lr else L + (2*d, 0) + p1 = p2 + (2*d, -d) if lr else p2 + (-2*d, -d) + p3 = p2 + (2*d, d) if lr else p2 + (-2*d, d) + p1 *= im + p2 *= im + p3 *= im + ap = "\nq\n%s%f %f m\n" % (opacity, p1.x, p1.y) + ap += "%f %f l\n" % (p2.x, p2.y) + ap += "%f %f l\n" % (p3.x, p3.y) + ap += "%g w\n" % w + ap += scol + fcol + "b\nQ\n" + return ap + %} + } +}; diff --git a/fitz/helper-annot.i b/fitz/helper-annot.i new file mode 100644 index 0000000..69b45a9 --- /dev/null +++ b/fitz/helper-annot.i @@ -0,0 +1,445 @@ +%{ +//---------------------------------------------------------------------------- +// return pdf_obj "border style" from Python str +//---------------------------------------------------------------------------- +pdf_obj *JM_get_border_style(fz_context *ctx, PyObject *style) +{ + pdf_obj *val = PDF_NAME(S); + if (!style) return val; + char *s = JM_Python_str_AsChar(style); + JM_PyErr_Clear; + if (!s) return val; + if (!strncmp(s, "b", 1) || !strncmp(s, "B", 1)) val = PDF_NAME(B); + else if (!strncmp(s, "d", 1) || !strncmp(s, "D", 1)) val = PDF_NAME(D); + else if (!strncmp(s, "i", 1) || !strncmp(s, "I", 1)) val = PDF_NAME(I); + else if (!strncmp(s, "u", 1) || !strncmp(s, "U", 1)) val = PDF_NAME(U); + JM_Python_str_DelForPy3(s); + return val; +} + +//---------------------------------------------------------------------------- +// Make /DA string of annotation +//---------------------------------------------------------------------------- +const char *JM_expand_fname(const char **name) +{ + if (!*name) return "Helv"; + if (!strncmp(*name, "Co", 2)) return "Cour"; + if (!strncmp(*name, "co", 2)) return "Cour"; + if (!strncmp(*name, "Ti", 2)) return "TiRo"; + if (!strncmp(*name, "ti", 2)) return "TiRo"; + if (!strncmp(*name, "Sy", 2)) return "Symb"; + if (!strncmp(*name, "sy", 2)) return "Symb"; + if (!strncmp(*name, "Za", 2)) return "ZaDb"; + if (!strncmp(*name, "za", 2)) return "ZaDb"; + return "Helv"; +} + +void JM_make_annot_DA(fz_context *ctx, pdf_annot *annot, int ncol, float col[4], const char *fontname, float fontsize) +{ + fz_buffer *buf = NULL; + fz_try(ctx) + { + buf = fz_new_buffer(ctx, 50); + if (ncol == 1) + fz_append_printf(ctx, buf, "%g g ", col[0]); + else if (ncol == 3) + fz_append_printf(ctx, buf, "%g %g %g rg ", col[0], col[1], col[2]); + else + fz_append_printf(ctx, buf, "%g %g %g %g k ", col[0], col[1], col[2], col[3]); + fz_append_printf(ctx, buf, "/%s %g Tf", JM_expand_fname(&fontname), fontsize); + unsigned char *da = NULL; + size_t len = fz_buffer_storage(ctx, buf, &da); + pdf_dict_put_string(ctx, annot->obj, PDF_NAME(DA), (const char *) da, len); + } + fz_always(ctx) fz_drop_buffer(ctx, buf); + fz_catch(ctx) fz_rethrow(ctx); + return; +} + +//---------------------------------------------------------------------------- +// refreshes the link and annotation tables of a page +//---------------------------------------------------------------------------- +void JM_refresh_link_table(fz_context *ctx, pdf_page *page) +{ + fz_try(ctx) + { + pdf_obj *annots_arr = pdf_dict_get(ctx, page->obj, PDF_NAME(Annots)); + if (annots_arr) { + fz_rect page_mediabox; + fz_matrix page_ctm; + pdf_page_transform(ctx, page, &page_mediabox, &page_ctm); + page->links = pdf_load_link_annots(ctx, page->doc, annots_arr, + pdf_to_num(ctx, page->obj), page_ctm); + pdf_load_annots(ctx, page, annots_arr); + } + } + fz_catch(ctx) { + fz_rethrow(ctx); + } + return; +} + + +PyObject *JM_annot_border(fz_context *ctx, pdf_obj *annot_obj) +{ + PyObject *res = PyDict_New(); + PyObject *dash_py = PyList_New(0); + PyObject *effect_py = PyList_New(0); + PyObject *val; + int i; + char *effect2 = NULL, *style = NULL; + float width = -1.0f; + int effect1 = -1; + + pdf_obj *o = pdf_dict_get(ctx, annot_obj, PDF_NAME(Border)); + if (pdf_is_array(ctx, o)) { + width = pdf_to_real(ctx, pdf_array_get(ctx, o, 2)); + if (pdf_array_len(ctx, o) == 4) { + pdf_obj *dash = pdf_array_get(ctx, o, 3); + for (i = 0; i < pdf_array_len(ctx, dash); i++) { + val = Py_BuildValue("i", pdf_to_int(ctx, pdf_array_get(ctx, dash, i))); + LIST_APPEND_DROP(dash_py, val); + } + } + } + + pdf_obj *bs_o = pdf_dict_get(ctx, annot_obj, PDF_NAME(BS)); + if (bs_o) + { + o = pdf_dict_get(ctx, bs_o, PDF_NAME(W)); + if (o) width = pdf_to_real(ctx, o); + o = pdf_dict_get(ctx, bs_o, PDF_NAME(S)); + if (o) style = (char *) pdf_to_name(ctx, o); + o = pdf_dict_get(ctx, bs_o, PDF_NAME(D)); + if (o) { + for (i = 0; i < pdf_array_len(ctx, o); i++) { + val = Py_BuildValue("i", pdf_to_int(ctx, pdf_array_get(ctx, o, i))); + LIST_APPEND_DROP(dash_py, val); + } + } + } + + pdf_obj *be_o = pdf_dict_gets(ctx, annot_obj, "BE"); + if (be_o) { + o = pdf_dict_get(ctx, be_o, PDF_NAME(S)); + if (o) effect2 = (char *) pdf_to_name(ctx, o); + o = pdf_dict_get(ctx, be_o, PDF_NAME(I)); + if (o) effect1 = pdf_to_int(ctx, o); + } + + LIST_APPEND_DROP(effect_py, Py_BuildValue("i", effect1)); + LIST_APPEND_DROP(effect_py, Py_BuildValue("s", effect2)); + DICT_SETITEM_DROP(res, dictkey_width, Py_BuildValue("f", width)); + DICT_SETITEM_DROP(res, dictkey_dashes, dash_py); + DICT_SETITEM_DROP(res, dictkey_style, Py_BuildValue("s", style)); + if (effect1 > -1) PyDict_SetItem(res, dictkey_effect, effect_py); + Py_CLEAR(effect_py); + return res; +} + +PyObject *JM_annot_set_border(fz_context *ctx, PyObject *border, pdf_document *doc, pdf_obj *annot_obj) +{ + if (!PyDict_Check(border)) { + JM_Warning("arg must be a dict"); + Py_RETURN_NONE; // not a dict + } + + double nwidth = -1; // new width + double owidth = -1; // old width + PyObject *ndashes = NULL; // new dashes + PyObject *odashes = NULL; // old dashes + PyObject *nstyle = NULL; // new style + PyObject *ostyle = NULL; // old style + + nwidth = PyFloat_AsDouble(PyDict_GetItem(border, dictkey_width)); + ndashes = PyDict_GetItem(border, dictkey_dashes); + nstyle = PyDict_GetItem(border, dictkey_style); + + // first get old border properties + PyObject *oborder = JM_annot_border(ctx, annot_obj); + owidth = PyFloat_AsDouble(PyDict_GetItem(oborder, dictkey_width)); + odashes = PyDict_GetItem(oborder, dictkey_dashes); + ostyle = PyDict_GetItem(oborder, dictkey_style); + + // then delete any relevant entries + pdf_dict_del(ctx, annot_obj, PDF_NAME(BS)); + pdf_dict_del(ctx, annot_obj, PDF_NAME(BE)); + pdf_dict_del(ctx, annot_obj, PDF_NAME(Border)); + + Py_ssize_t i, n; + int d; + // populate new border array + if (nwidth < 0) nwidth = owidth; // no new width: take current + if (nwidth < 0) nwidth = 0.0f; // default if no width given + if (!ndashes) ndashes = odashes; // no new dashes: take old + if (!nstyle) nstyle = ostyle; // no new style: take old + + if (ndashes && PySequence_Check(ndashes) && PySequence_Size(ndashes) > 0) { + n = PySequence_Size(ndashes); + pdf_obj *darr = pdf_new_array(ctx, doc, n); + for (i = 0; i < n; i++) { + d = (int) PyInt_AsLong(PySequence_ITEM(ndashes, i)); + pdf_array_push_int(ctx, darr, (int64_t) d); + } + pdf_dict_putl_drop(ctx, annot_obj, darr, PDF_NAME(BS), PDF_NAME(D), NULL); + nstyle = PyUnicode_FromString("D"); + } + + pdf_dict_putl_drop(ctx, annot_obj, pdf_new_real(ctx, nwidth), + PDF_NAME(BS), PDF_NAME(W), NULL); + + pdf_obj *val = JM_get_border_style(ctx, nstyle); + + pdf_dict_putl_drop(ctx, annot_obj, val, + PDF_NAME(BS), PDF_NAME(S), NULL); + + PyErr_Clear(); + Py_RETURN_NONE; +} + +PyObject *JM_annot_colors(fz_context *ctx, pdf_obj *annot_obj) +{ + PyObject *res = PyDict_New(); + PyObject *bc = PyList_New(0); // stroke colors + PyObject *fc = PyList_New(0); // fill colors + int i; + float col; + pdf_obj *o = pdf_dict_get(ctx, annot_obj, PDF_NAME(C)); + if (pdf_is_array(ctx, o)) { + int n = pdf_array_len(ctx, o); + for (i = 0; i < n; i++) { + col = pdf_to_real(ctx, pdf_array_get(ctx, o, i)); + LIST_APPEND_DROP(bc, Py_BuildValue("f", col)); + } + } + DICT_SETITEM_DROP(res, dictkey_stroke, bc); + + o = pdf_dict_gets(ctx, annot_obj, "IC"); + if (pdf_is_array(ctx, o)) { + int n = pdf_array_len(ctx, o); + for (i = 0; i < n; i++) { + col = pdf_to_real(ctx, pdf_array_get(ctx, o, i)); + LIST_APPEND_DROP(fc, Py_BuildValue("f", col)); + } + } + DICT_SETITEM_DROP(res, dictkey_fill, fc); + + return res; +} + +//---------------------------------------------------------------------------- +// delete an annotation using mupdf functions, but first delete the /AP and +// /Popup dict keys in annot->obj. Also remove the 'Popup' annotation +// from the page's /Annots array which may also exist. +//---------------------------------------------------------------------------- +void JM_delete_annot(fz_context *ctx, pdf_page *page, pdf_annot *annot) +{ + if (!annot) return; + fz_try(ctx) { + // first get any existing popup for the annotation + pdf_obj *popup = pdf_dict_get(ctx, annot->obj, PDF_NAME(Popup)); + + + // next delete the /Popup and /AP entries from annot dictionary + pdf_dict_del(ctx, annot->obj, PDF_NAME(Popup)); + pdf_dict_del(ctx, annot->obj, PDF_NAME(AP)); + + // if there exists a /Popup, find and destroy it. The right popup + // has a /Parent entry which points to our annotation. + + pdf_obj *annots = pdf_dict_get(ctx, page->obj, PDF_NAME(Annots)); + int i, n = pdf_array_len(ctx, annots); + for (i = n - 1; i >= 0; i--) { + pdf_obj *o = pdf_array_get(ctx, annots, i); + pdf_obj *p = pdf_dict_get(ctx, o, PDF_NAME(Parent)); + if (!p) continue; + if (!pdf_objcmp(ctx, p, annot->obj)) { + pdf_array_delete(ctx, annots, i); + } + } + + pdf_delete_annot(ctx, page, annot); + } + fz_catch(ctx) { + fz_warn(ctx, "could not delete annotation"); + } + return; +} + +//---------------------------------------------------------------------------- +// Return the first annotation whose /IRT key ("In Response To") points to +// annot. Used to remove the response chain of a given annotation. +//---------------------------------------------------------------------------- +pdf_annot *JM_find_annot_irt(fz_context *ctx, pdf_annot *annot) +{ + pdf_annot *irt_annot = NULL; // returning this + pdf_obj *o = NULL; + pdf_annot **annotptr; + int found = 0; + fz_try(ctx) { // loop thru MuPDF's internal annots array + pdf_page *page = annot->page; + for (annotptr = &page->annots; *annotptr; annotptr = &(*annotptr)->next) { + irt_annot = *annotptr; // check if this is what we are looking for + o = pdf_dict_gets(ctx, irt_annot->obj, "IRT"); + if (o) { + if (!pdf_objcmp(ctx, o, annot->obj)) { + found = 1; + break; + } + } + } + } + fz_catch(ctx) {;} + if (found) return irt_annot; + return NULL; +} + +//---------------------------------------------------------------------------- +// return the identifications of a page's annotations (list of /NM entries) +//---------------------------------------------------------------------------- +PyObject *JM_get_annot_id_list(fz_context *ctx, pdf_page *page) +{ + PyObject *names = PyList_New(0); + pdf_obj *annot_obj = NULL; + pdf_obj *annots = pdf_dict_get(ctx, page->obj, PDF_NAME(Annots)); + pdf_obj *name = NULL; + if (!annots) return names; + fz_try(ctx) { + int i, n = pdf_array_len(ctx, annots); + for (i = 0; i < n; i++) { + annot_obj = pdf_array_get(ctx, annots, i); + name = pdf_dict_gets(ctx, annot_obj, "NM"); + if (name) { + LIST_APPEND_DROP(names, Py_BuildValue("s", pdf_to_text_string(ctx, name))); + } + } + } + fz_catch(ctx) { + return names; + } + return names; +} + + +//---------------------------------------------------------------------------- +// return the xref numbers of a page's annots, links and fields +//---------------------------------------------------------------------------- +PyObject *JM_get_annot_xref_list(fz_context *ctx, pdf_page *page) +{ + PyObject *names = PyList_New(0); + pdf_obj *annot_obj = NULL; + pdf_obj *annots = pdf_dict_get(ctx, page->obj, PDF_NAME(Annots)); + pdf_obj *name = NULL; + if (!annots) return names; + fz_try(ctx) { + int i, n = pdf_array_len(ctx, annots); + for (i = 0; i < n; i++) { + annot_obj = pdf_array_get(ctx, annots, i); + int xref = pdf_to_num(ctx, annot_obj); + pdf_obj *subtype = pdf_dict_get(ctx, annot_obj, PDF_NAME(Subtype)); + int type = PDF_ANNOT_UNKNOWN; + if (subtype) { + const char *name = pdf_to_name(ctx, subtype); + type = pdf_annot_type_from_string(ctx, name); + } + LIST_APPEND_DROP(names, Py_BuildValue("ii", xref, type)); + } + } + fz_catch(ctx) { + return names; + } + return names; +} + + +//---------------------------------------------------------------------------- +// Add a unique /NM key to an annotation or widget. +// Append a number to 'stem' such that the result is a unique name. +//---------------------------------------------------------------------------- +void JM_add_annot_id(fz_context *ctx, pdf_annot *annot, char *stem) +{ + fz_try(ctx) { + PyObject *names = NULL; + names = JM_get_annot_id_list(ctx, annot->page); + + int i = 0; + PyObject *stem_id = NULL; + while (1) { + stem_id = PyUnicode_FromFormat("%s-%d", stem, i); + if (!PySequence_Contains(names, stem_id)) break; + i += 1; + Py_DECREF(stem_id); + } + char *response = JM_Python_str_AsChar(stem_id); + pdf_obj *name = pdf_new_string(ctx, (const char *) response, strlen(response)); + pdf_dict_puts_drop(ctx, annot->obj, "NM", name); + JM_Python_str_DelForPy3(response); + Py_CLEAR(stem_id); + Py_CLEAR(names); + } + fz_catch(ctx) { + fz_rethrow(ctx); + } +} + +//---------------------------------------------------------------------------- +// retrieve annot by name (/NM key) +//---------------------------------------------------------------------------- +pdf_annot *JM_get_annot_by_name(fz_context *ctx, pdf_page *page, char *name) +{ + if (!name || strlen(name) == 0) { + return NULL; + } + pdf_annot **annotptr = NULL; + pdf_annot *annot = NULL; + int found = 0; + size_t len = 0; + + fz_try(ctx) { // loop thru MuPDF's internal annots and widget arrays + for (annotptr = &page->annots; *annotptr; annotptr = &(*annotptr)->next) { + annot = *annotptr; + const char *response = pdf_to_string(ctx, pdf_dict_gets(ctx, annot->obj, "NM"), &len); + if (strcmp(name, response) == 0) { + found = 1; + break; + } + } + if (!found) { + fz_throw(ctx, FZ_ERROR_GENERIC, "'%s' is not an annot of this page", name); + } + } + fz_catch(ctx) { + fz_rethrow(ctx); + } + return pdf_keep_annot(ctx, annot); +} + +//---------------------------------------------------------------------------- +// retrieve annot by its xref +//---------------------------------------------------------------------------- +pdf_annot *JM_get_annot_by_xref(fz_context *ctx, pdf_page *page, int xref) +{ + pdf_annot **annotptr = NULL; + pdf_annot *annot = NULL; + int found = 0; + size_t len = 0; + + fz_try(ctx) { // loop thru MuPDF's internal annots array + for (annotptr = &page->annots; *annotptr; annotptr = &(*annotptr)->next) { + annot = *annotptr; + if (xref == pdf_to_num(ctx, annot->obj)) { + found = 1; + break; + } + } + if (!found) { + fz_throw(ctx, FZ_ERROR_GENERIC, "xref %d is not an annot of this page", xref); + } + } + fz_catch(ctx) { + fz_rethrow(ctx); + } + return pdf_keep_annot(ctx, annot); +} + +%} diff --git a/fitz/helper-convert.i b/fitz/helper-convert.i new file mode 100644 index 0000000..ea1d23e --- /dev/null +++ b/fitz/helper-convert.i @@ -0,0 +1,84 @@ +%{ +//----------------------------------------------------------------------------- +// Convert any MuPDF document to a PDF +// Returns bytes object containing the PDF, created via 'write' function. +//----------------------------------------------------------------------------- +PyObject *JM_convert_to_pdf(fz_context *ctx, fz_document *doc, int fp, int tp, int rotate) +{ + pdf_document *pdfout = pdf_create_document(ctx); // new PDF document + int i, incr = 1, s = fp, e = tp; + if (fp > tp) { + incr = -1; // count backwards + s = tp; // adjust ... + e = fp; // ... range + } + fz_rect mediabox; + int rot = JM_norm_rotation(rotate); + fz_device *dev = NULL; + fz_buffer *contents = NULL; + pdf_obj *resources = NULL; + fz_page *page; + fz_var(dev); + fz_var(contents); + fz_var(resources); + fz_var(page); + for (i = fp; INRANGE(i, s, e); i += incr) { // interpret & write document pages as PDF pages + fz_try(ctx) { + page = fz_load_page(ctx, doc, i); + mediabox = fz_bound_page(ctx, page); + dev = pdf_page_write(ctx, pdfout, mediabox, &resources, &contents); + fz_run_page(ctx, page, dev, fz_identity, NULL); + fz_close_device(ctx, dev); + fz_drop_device(ctx, dev); + dev = NULL; + pdf_obj *page_obj = pdf_add_page(ctx, pdfout, mediabox, rot, resources, contents); + pdf_insert_page(ctx, pdfout, -1, page_obj); + pdf_drop_obj(ctx, page_obj); + } + fz_always(ctx) { + pdf_drop_obj(ctx, resources); + fz_drop_buffer(ctx, contents); + fz_drop_device(ctx, dev); + fz_drop_page(ctx, page); + } + fz_catch(ctx) { + fz_rethrow(ctx); + } + } + // PDF created - now write it to Python bytearray + PyObject *r = NULL; + fz_output *out = NULL; + fz_buffer *res = NULL; + // prepare write options structure + pdf_write_options opts = { 0 }; + opts.do_garbage = 4; + opts.do_compress = 1; + opts.do_compress_images = 1; + opts.do_compress_fonts = 1; + opts.do_sanitize = 1; + opts.do_incremental = 0; + opts.do_ascii = 0; + opts.do_decompress = 0; + opts.do_linear = 0; + opts.do_clean = 1; + opts.do_pretty = 0; + + fz_try(ctx) { + res = fz_new_buffer(ctx, 8192); + out = fz_new_output_with_buffer(ctx, res); + pdf_write_document(ctx, pdfout, out, &opts); + unsigned char *c = NULL; + size_t len = fz_buffer_storage(gctx, res, &c); + r = PyBytes_FromStringAndSize((const char *) c, (Py_ssize_t) len); + } + fz_always(ctx) { + pdf_drop_document(ctx, pdfout); + fz_drop_output(ctx, out); + fz_drop_buffer(ctx, res); + } + fz_catch(ctx) { + fz_rethrow(ctx); + } + return r; +} +%} diff --git a/fitz/helper-defines.i b/fitz/helper-defines.i new file mode 100644 index 0000000..629556b --- /dev/null +++ b/fitz/helper-defines.i @@ -0,0 +1,400 @@ +%inline %{ +//---------------------------------------------------------------------------- +// general +//---------------------------------------------------------------------------- +#define EPSILON 1e-5 + +//---------------------------------------------------------------------------- +// annotation types +//---------------------------------------------------------------------------- +#define PDF_ANNOT_TEXT 0 +#define PDF_ANNOT_LINK 1 +#define PDF_ANNOT_FREE_TEXT 2 +#define PDF_ANNOT_LINE 3 +#define PDF_ANNOT_SQUARE 4 +#define PDF_ANNOT_CIRCLE 5 +#define PDF_ANNOT_POLYGON 6 +#define PDF_ANNOT_POLY_LINE 7 +#define PDF_ANNOT_HIGHLIGHT 8 +#define PDF_ANNOT_UNDERLINE 9 +#define PDF_ANNOT_SQUIGGLY 10 +#define PDF_ANNOT_STRIKE_OUT 11 +#define PDF_ANNOT_REDACT 12 +#define PDF_ANNOT_STAMP 13 +#define PDF_ANNOT_CARET 14 +#define PDF_ANNOT_INK 15 +#define PDF_ANNOT_POPUP 16 +#define PDF_ANNOT_FILE_ATTACHMENT 17 +#define PDF_ANNOT_SOUND 18 +#define PDF_ANNOT_MOVIE 19 +#define PDF_ANNOT_WIDGET 20 +#define PDF_ANNOT_SCREEN 21 +#define PDF_ANNOT_PRINTER_MARK 22 +#define PDF_ANNOT_TRAP_NET 23 +#define PDF_ANNOT_WATERMARK 24 +#define PDF_ANNOT_3D 25 +#define PDF_ANNOT_UNKNOWN -1 + + +//---------------------------------------------------------------------------- +// annotation flag bits +//---------------------------------------------------------------------------- +#define PDF_ANNOT_IS_INVISIBLE 1 << (1-1) +#define PDF_ANNOT_IS_HIDDEN 1 << (2-1) +#define PDF_ANNOT_IS_PRINT 1 << (3-1) +#define PDF_ANNOT_IS_NO_ZOOM 1 << (4-1) +#define PDF_ANNOT_IS_NO_ROTATE 1 << (5-1) +#define PDF_ANNOT_IS_NO_VIEW 1 << (6-1) +#define PDF_ANNOT_IS_READ_ONLY 1 << (7-1) +#define PDF_ANNOT_IS_LOCKED 1 << (8-1) +#define PDF_ANNOT_IS_TOGGLE_NO_VIEW 1 << (9-1) +#define PDF_ANNOT_IS_LOCKED_CONTENTS 1 << (10-1) + + +//---------------------------------------------------------------------------- +// annotation line ending styles +//---------------------------------------------------------------------------- +#define PDF_ANNOT_LE_NONE 0 +#define PDF_ANNOT_LE_SQUARE 1 +#define PDF_ANNOT_LE_CIRCLE 2 +#define PDF_ANNOT_LE_DIAMOND 3 +#define PDF_ANNOT_LE_OPEN_ARROW 4 +#define PDF_ANNOT_LE_CLOSED_ARROW 5 +#define PDF_ANNOT_LE_BUTT 6 +#define PDF_ANNOT_LE_R_OPEN_ARROW 7 +#define PDF_ANNOT_LE_R_CLOSED_ARROW 8 +#define PDF_ANNOT_LE_SLASH 9 + + +//---------------------------------------------------------------------------- +// annotation field (widget) types +//---------------------------------------------------------------------------- +#define PDF_WIDGET_TYPE_UNKNOWN 0 +#define PDF_WIDGET_TYPE_BUTTON 1 +#define PDF_WIDGET_TYPE_CHECKBOX 2 +#define PDF_WIDGET_TYPE_COMBOBOX 3 +#define PDF_WIDGET_TYPE_LISTBOX 4 +#define PDF_WIDGET_TYPE_RADIOBUTTON 5 +#define PDF_WIDGET_TYPE_SIGNATURE 6 +#define PDF_WIDGET_TYPE_TEXT 7 + + +//---------------------------------------------------------------------------- +// annotation text widget subtypes +//---------------------------------------------------------------------------- +#define PDF_WIDGET_TX_FORMAT_NONE 0 +#define PDF_WIDGET_TX_FORMAT_NUMBER 1 +#define PDF_WIDGET_TX_FORMAT_SPECIAL 2 +#define PDF_WIDGET_TX_FORMAT_DATE 3 +#define PDF_WIDGET_TX_FORMAT_TIME 4 + + +//---------------------------------------------------------------------------- +// annotation widget flags +//---------------------------------------------------------------------------- +// Common to all field types +#define PDF_FIELD_IS_READ_ONLY 1 +#define PDF_FIELD_IS_REQUIRED 1 << 1 +#define PDF_FIELD_IS_NO_EXPORT 1 << 2 + + +// Text fields +#define PDF_TX_FIELD_IS_MULTILINE 1 << 12 +#define PDF_TX_FIELD_IS_PASSWORD 1 << 13 +#define PDF_TX_FIELD_IS_FILE_SELECT 1 << 20 +#define PDF_TX_FIELD_IS_DO_NOT_SPELL_CHECK 1 << 22 +#define PDF_TX_FIELD_IS_DO_NOT_SCROLL 1 << 23 +#define PDF_TX_FIELD_IS_COMB 1 << 24 +#define PDF_TX_FIELD_IS_RICH_TEXT 1 << 25 + + +// Button fields +#define PDF_BTN_FIELD_IS_NO_TOGGLE_TO_OFF 1 << 14 +#define PDF_BTN_FIELD_IS_RADIO 1 << 15 +#define PDF_BTN_FIELD_IS_PUSHBUTTON 1 << 16 +#define PDF_BTN_FIELD_IS_RADIOS_IN_UNISON 1 << 25 + + +// Choice fields +#define PDF_CH_FIELD_IS_COMBO 1 << 17 +#define PDF_CH_FIELD_IS_EDIT 1 << 18 +#define PDF_CH_FIELD_IS_SORT 1 << 19 +#define PDF_CH_FIELD_IS_MULTI_SELECT 1 << 21 +#define PDF_CH_FIELD_IS_DO_NOT_SPELL_CHECK 1 << 22 +#define PDF_CH_FIELD_IS_COMMIT_ON_SEL_CHANGE 1 << 26 + + +// Signature fields errors +#define PDF_SIGNATURE_ERROR_OKAY 0 +#define PDF_SIGNATURE_ERROR_NO_SIGNATURES 1 +#define PDF_SIGNATURE_ERROR_NO_CERTIFICATE 2 +#define PDF_SIGNATURE_ERROR_DIGEST_FAILURE 3 +#define PDF_SIGNATURE_ERROR_SELF_SIGNED 4 +#define PDF_SIGNATURE_ERROR_SELF_SIGNED_IN_CHAIN 5 +#define PDF_SIGNATURE_ERROR_NOT_TRUSTED 6 +#define PDF_SIGNATURE_ERROR_UNKNOWN 7 + + +//---------------------------------------------------------------------------- +// colorspace identifiers +//---------------------------------------------------------------------------- +#define CS_RGB 1 +#define CS_GRAY 2 +#define CS_CMYK 3 + +//---------------------------------------------------------------------------- +// PDF encryption algorithms +//---------------------------------------------------------------------------- +#define PDF_ENCRYPT_KEEP 0 +#define PDF_ENCRYPT_NONE 1 +#define PDF_ENCRYPT_RC4_40 2 +#define PDF_ENCRYPT_RC4_128 3 +#define PDF_ENCRYPT_AES_128 4 +#define PDF_ENCRYPT_AES_256 5 +#define PDF_ENCRYPT_UNKNOWN 6 + +//---------------------------------------------------------------------------- +// PDF permission codes +//---------------------------------------------------------------------------- +#define PDF_PERM_PRINT 1 << 2 +#define PDF_PERM_MODIFY 1 << 3 +#define PDF_PERM_COPY 1 << 4 +#define PDF_PERM_ANNOTATE 1 << 5 +#define PDF_PERM_FORM 1 << 8 +#define PDF_PERM_ACCESSIBILITY 1 << 9 +#define PDF_PERM_ASSEMBLE 1 << 10 +#define PDF_PERM_PRINT_HQ 1 << 11 + +//---------------------------------------------------------------------------- +// PDF Blend Modes +//---------------------------------------------------------------------------- +#define PDF_BM_Color "Color" +#define PDF_BM_ColorBurn "ColorBurn" +#define PDF_BM_ColorDodge "ColorDodge" +#define PDF_BM_Darken "Darken" +#define PDF_BM_Difference "Difference" +#define PDF_BM_Exclusion "Exclusion" +#define PDF_BM_HardLight "HardLight" +#define PDF_BM_Hue "Hue" +#define PDF_BM_Lighten "Lighten" +#define PDF_BM_Luminosity "Luminosity" +#define PDF_BM_Multiply "Multiply" +#define PDF_BM_Normal "Normal" +#define PDF_BM_Overlay "Overlay" +#define PDF_BM_Saturation "Saturation" +#define PDF_BM_Screen "Screen" +#define PDF_BM_SoftLight "Softlight" + + +// General text flags +#define TEXT_FONT_SUPERSCRIPT 1 +#define TEXT_FONT_ITALIC 2 +#define TEXT_FONT_SERIFED 4 +#define TEXT_FONT_MONOSPACED 8 +#define TEXT_FONT_BOLD 16 + +// UCDN Script codes +#define UCDN_SCRIPT_COMMON 0 +#define UCDN_SCRIPT_LATIN 1 +#define UCDN_SCRIPT_GREEK 2 +#define UCDN_SCRIPT_CYRILLIC 3 +#define UCDN_SCRIPT_ARMENIAN 4 +#define UCDN_SCRIPT_HEBREW 5 +#define UCDN_SCRIPT_ARABIC 6 +#define UCDN_SCRIPT_SYRIAC 7 +#define UCDN_SCRIPT_THAANA 8 +#define UCDN_SCRIPT_DEVANAGARI 9 +#define UCDN_SCRIPT_BENGALI 10 +#define UCDN_SCRIPT_GURMUKHI 11 +#define UCDN_SCRIPT_GUJARATI 12 +#define UCDN_SCRIPT_ORIYA 13 +#define UCDN_SCRIPT_TAMIL 14 +#define UCDN_SCRIPT_TELUGU 15 +#define UCDN_SCRIPT_KANNADA 16 +#define UCDN_SCRIPT_MALAYALAM 17 +#define UCDN_SCRIPT_SINHALA 18 +#define UCDN_SCRIPT_THAI 19 +#define UCDN_SCRIPT_LAO 20 +#define UCDN_SCRIPT_TIBETAN 21 +#define UCDN_SCRIPT_MYANMAR 22 +#define UCDN_SCRIPT_GEORGIAN 23 +#define UCDN_SCRIPT_HANGUL 24 +#define UCDN_SCRIPT_ETHIOPIC 25 +#define UCDN_SCRIPT_CHEROKEE 26 +#define UCDN_SCRIPT_CANADIAN_ABORIGINAL 27 +#define UCDN_SCRIPT_OGHAM 28 +#define UCDN_SCRIPT_RUNIC 29 +#define UCDN_SCRIPT_KHMER 30 +#define UCDN_SCRIPT_MONGOLIAN 31 +#define UCDN_SCRIPT_HIRAGANA 32 +#define UCDN_SCRIPT_KATAKANA 33 +#define UCDN_SCRIPT_BOPOMOFO 34 +#define UCDN_SCRIPT_HAN 35 +#define UCDN_SCRIPT_YI 36 +#define UCDN_SCRIPT_OLD_ITALIC 37 +#define UCDN_SCRIPT_GOTHIC 38 +#define UCDN_SCRIPT_DESERET 39 +#define UCDN_SCRIPT_INHERITED 40 +#define UCDN_SCRIPT_TAGALOG 41 +#define UCDN_SCRIPT_HANUNOO 42 +#define UCDN_SCRIPT_BUHID 43 +#define UCDN_SCRIPT_TAGBANWA 44 +#define UCDN_SCRIPT_LIMBU 45 +#define UCDN_SCRIPT_TAI_LE 46 +#define UCDN_SCRIPT_LINEAR_B 47 +#define UCDN_SCRIPT_UGARITIC 48 +#define UCDN_SCRIPT_SHAVIAN 49 +#define UCDN_SCRIPT_OSMANYA 50 +#define UCDN_SCRIPT_CYPRIOT 51 +#define UCDN_SCRIPT_BRAILLE 52 +#define UCDN_SCRIPT_BUGINESE 53 +#define UCDN_SCRIPT_COPTIC 54 +#define UCDN_SCRIPT_NEW_TAI_LUE 55 +#define UCDN_SCRIPT_GLAGOLITIC 56 +#define UCDN_SCRIPT_TIFINAGH 57 +#define UCDN_SCRIPT_SYLOTI_NAGRI 58 +#define UCDN_SCRIPT_OLD_PERSIAN 59 +#define UCDN_SCRIPT_KHAROSHTHI 60 +#define UCDN_SCRIPT_BALINESE 61 +#define UCDN_SCRIPT_CUNEIFORM 62 +#define UCDN_SCRIPT_PHOENICIAN 63 +#define UCDN_SCRIPT_PHAGS_PA 64 +#define UCDN_SCRIPT_NKO 65 +#define UCDN_SCRIPT_SUNDANESE 66 +#define UCDN_SCRIPT_LEPCHA 67 +#define UCDN_SCRIPT_OL_CHIKI 68 +#define UCDN_SCRIPT_VAI 69 +#define UCDN_SCRIPT_SAURASHTRA 70 +#define UCDN_SCRIPT_KAYAH_LI 71 +#define UCDN_SCRIPT_REJANG 72 +#define UCDN_SCRIPT_LYCIAN 73 +#define UCDN_SCRIPT_CARIAN 74 +#define UCDN_SCRIPT_LYDIAN 75 +#define UCDN_SCRIPT_CHAM 76 +#define UCDN_SCRIPT_TAI_THAM 77 +#define UCDN_SCRIPT_TAI_VIET 78 +#define UCDN_SCRIPT_AVESTAN 79 +#define UCDN_SCRIPT_EGYPTIAN_HIEROGLYPHS 80 +#define UCDN_SCRIPT_SAMARITAN 81 +#define UCDN_SCRIPT_LISU 82 +#define UCDN_SCRIPT_BAMUM 83 +#define UCDN_SCRIPT_JAVANESE 84 +#define UCDN_SCRIPT_MEETEI_MAYEK 85 +#define UCDN_SCRIPT_IMPERIAL_ARAMAIC 86 +#define UCDN_SCRIPT_OLD_SOUTH_ARABIAN 87 +#define UCDN_SCRIPT_INSCRIPTIONAL_PARTHIAN 88 +#define UCDN_SCRIPT_INSCRIPTIONAL_PAHLAVI 89 +#define UCDN_SCRIPT_OLD_TURKIC 90 +#define UCDN_SCRIPT_KAITHI 91 +#define UCDN_SCRIPT_BATAK 92 +#define UCDN_SCRIPT_BRAHMI 93 +#define UCDN_SCRIPT_MANDAIC 94 +#define UCDN_SCRIPT_CHAKMA 95 +#define UCDN_SCRIPT_MEROITIC_CURSIVE 96 +#define UCDN_SCRIPT_MEROITIC_HIEROGLYPHS 97 +#define UCDN_SCRIPT_MIAO 98 +#define UCDN_SCRIPT_SHARADA 99 +#define UCDN_SCRIPT_SORA_SOMPENG 100 +#define UCDN_SCRIPT_TAKRI 101 +#define UCDN_SCRIPT_UNKNOWN 102 +#define UCDN_SCRIPT_BASSA_VAH 103 +#define UCDN_SCRIPT_CAUCASIAN_ALBANIAN 104 +#define UCDN_SCRIPT_DUPLOYAN 105 +#define UCDN_SCRIPT_ELBASAN 106 +#define UCDN_SCRIPT_GRANTHA 107 +#define UCDN_SCRIPT_KHOJKI 108 +#define UCDN_SCRIPT_KHUDAWADI 109 +#define UCDN_SCRIPT_LINEAR_A 110 +#define UCDN_SCRIPT_MAHAJANI 111 +#define UCDN_SCRIPT_MANICHAEAN 112 +#define UCDN_SCRIPT_MENDE_KIKAKUI 113 +#define UCDN_SCRIPT_MODI 114 +#define UCDN_SCRIPT_MRO 115 +#define UCDN_SCRIPT_NABATAEAN 116 +#define UCDN_SCRIPT_OLD_NORTH_ARABIAN 117 +#define UCDN_SCRIPT_OLD_PERMIC 118 +#define UCDN_SCRIPT_PAHAWH_HMONG 119 +#define UCDN_SCRIPT_PALMYRENE 120 +#define UCDN_SCRIPT_PAU_CIN_HAU 121 +#define UCDN_SCRIPT_PSALTER_PAHLAVI 122 +#define UCDN_SCRIPT_SIDDHAM 123 +#define UCDN_SCRIPT_TIRHUTA 124 +#define UCDN_SCRIPT_WARANG_CITI 125 +#define UCDN_SCRIPT_AHOM 126 +#define UCDN_SCRIPT_ANATOLIAN_HIEROGLYPHS 127 +#define UCDN_SCRIPT_HATRAN 128 +#define UCDN_SCRIPT_MULTANI 129 +#define UCDN_SCRIPT_OLD_HUNGARIAN 130 +#define UCDN_SCRIPT_SIGNWRITING 131 +#define UCDN_SCRIPT_ADLAM 132 +#define UCDN_SCRIPT_BHAIKSUKI 133 +#define UCDN_SCRIPT_MARCHEN 134 +#define UCDN_SCRIPT_NEWA 135 +#define UCDN_SCRIPT_OSAGE 136 +#define UCDN_SCRIPT_TANGUT 137 +#define UCDN_SCRIPT_MASARAM_GONDI 138 +#define UCDN_SCRIPT_NUSHU 139 +#define UCDN_SCRIPT_SOYOMBO 140 +#define UCDN_SCRIPT_ZANABAZAR_SQUARE 141 +#define UCDN_SCRIPT_DOGRA 142 +#define UCDN_SCRIPT_GUNJALA_GONDI 143 +#define UCDN_SCRIPT_HANIFI_ROHINGYA 144 +#define UCDN_SCRIPT_MAKASAR 145 +#define UCDN_SCRIPT_MEDEFAIDRIN 146 +#define UCDN_SCRIPT_OLD_SOGDIAN 147 +#define UCDN_SCRIPT_SOGDIAN 148 +#define UCDN_SCRIPT_ELYMAIC 149 +#define UCDN_SCRIPT_NANDINAGARI 150 +#define UCDN_SCRIPT_NYIAKENG_PUACHUE_HMONG 151 +#define UCDN_SCRIPT_WANCHO 152 + +%} + +%{ +// Global Constants - Python dictionary keys +PyObject *dictkey_align; +PyObject *dictkey_bbox; +PyObject *dictkey_blocks; +PyObject *dictkey_bpc; +PyObject *dictkey_c; +PyObject *dictkey_chars; +PyObject *dictkey_color; +PyObject *dictkey_colorspace; +PyObject *dictkey_content; +PyObject *dictkey_creationDate; +PyObject *dictkey_cs_name; +PyObject *dictkey_da; +PyObject *dictkey_dashes; +PyObject *dictkey_desc; +PyObject *dictkey_dir; +PyObject *dictkey_effect; +PyObject *dictkey_ext; +PyObject *dictkey_filename; +PyObject *dictkey_fill; +PyObject *dictkey_flags; +PyObject *dictkey_font; +PyObject *dictkey_height; +PyObject *dictkey_id; +PyObject *dictkey_image; +PyObject *dictkey_length; +PyObject *dictkey_lines; +PyObject *dictkey_modDate; +PyObject *dictkey_name; +PyObject *dictkey_origin; +PyObject *dictkey_size; +PyObject *dictkey_smask; +PyObject *dictkey_spans; +PyObject *dictkey_stroke; +PyObject *dictkey_style; +PyObject *dictkey_subject; +PyObject *dictkey_text; +PyObject *dictkey_title; +PyObject *dictkey_type; +PyObject *dictkey_ufilename; +PyObject *dictkey_width; +PyObject *dictkey_wmode; +PyObject *dictkey_xref; +PyObject *dictkey_xres; +PyObject *dictkey_yres; + +%} diff --git a/fitz/helper-fields.i b/fitz/helper-fields.i new file mode 100644 index 0000000..3a68ec4 --- /dev/null +++ b/fitz/helper-fields.i @@ -0,0 +1,977 @@ +%{ +#define SETATTR(a, v) PyObject_SetAttrString(Widget, a, v) +#define GETATTR(a) PyObject_GetAttrString(Widget, a) +#define CALLATTR(m, p) PyObject_CallMethod(Widget, m, p) + +static void +SETATTR_DROP(PyObject *mod, const char *attr, PyObject *value) +{ + if (!value) + PyObject_DelAttrString(mod, attr); + else + { + PyObject_SetAttrString(mod, attr, value); + Py_DECREF(value); + } +} + +//----------------------------------------------------------------------------- +// Functions dealing with PDF form fields (widgets) +//----------------------------------------------------------------------------- +enum +{ + SigFlag_SignaturesExist = 1, + SigFlag_AppendOnly = 2 +}; + + +// make new PDF action object from JavaScript source +// Parameters are a PDF document and a Python string. +// Returns a PDF action object. +//----------------------------------------------------------------------------- +pdf_obj * +JM_new_javascript(fz_context *ctx, pdf_document *pdf, PyObject *value) +{ + fz_buffer *res = NULL; + if (!PyObject_IsTrue(value)) // no argument given + return NULL; + + char *data = JM_Python_str_AsChar(value); + if (!data) // not convertible to char* + return NULL; + + res = fz_new_buffer_from_copied_data(ctx, data, strlen(data)); + pdf_obj *source = pdf_add_stream(ctx, pdf, res, NULL, 0); + pdf_obj *newaction = pdf_add_new_dict(ctx, pdf, 4); + pdf_dict_put(ctx, newaction, PDF_NAME(S), pdf_new_name(ctx, "JavaScript")); + pdf_dict_put(ctx, newaction, PDF_NAME(JS), source); + JM_Python_str_DelForPy3(data); + fz_drop_buffer(ctx, res); + return pdf_keep_obj(ctx, newaction); +} + + +// JavaScript extractor +// Returns either the script source or None. Parameter is a PDF action +// dictionary, which must have keys /S and /JS. The value of /S must be +// '/JavaScript'. The value of /JS is returned. +//----------------------------------------------------------------------------- +PyObject * +JM_get_script(fz_context *ctx, pdf_obj *key) +{ + pdf_obj *js = NULL; + fz_buffer *res = NULL; + PyObject *script = NULL; + if (!key) Py_RETURN_NONE; + + if (!strcmp(pdf_to_name(ctx, + pdf_dict_get(ctx, key, PDF_NAME(S))), "JavaScript")) { + js = pdf_dict_get(ctx, key, PDF_NAME(JS)); + } + if (!js) Py_RETURN_NONE; + + if (pdf_is_string(ctx, js)) { + script = JM_UnicodeFromStr(pdf_to_text_string(ctx, js)); + } else if (pdf_is_stream(ctx, js)) { + res = pdf_load_stream(ctx, js); + script = JM_EscapeStrFromBuffer(ctx, res); + fz_drop_buffer(ctx, res); + } else { + Py_RETURN_NONE; + } + if (PyObject_IsTrue(script)) { // do not return an empty script + return script; + } + Py_CLEAR(script); + Py_RETURN_NONE; +} + + +// Create a JavaScript PDF action. +// Usable for all object types which support PDF actions, even if the +// argument name suggests annotations. Up to 2 key values can be specified, so +// JavaScript actions can be stored for '/A' and '/AA/?' keys. +//----------------------------------------------------------------------------- +void JM_put_script(fz_context *ctx, pdf_obj *annot_obj, pdf_obj *key1, pdf_obj *key2, PyObject *value) +{ + PyObject *script = NULL; + pdf_obj *key1_obj = pdf_dict_get(ctx, annot_obj, key1); + pdf_document *pdf = pdf_get_bound_document(ctx, annot_obj); // owning PDF + + // if no new script given, just delete corresponding key + if (!value || !PyObject_IsTrue(value)) { + if (!key2) { + pdf_dict_del(ctx, annot_obj, key1); + } else if (key1_obj) { + pdf_dict_del(ctx, key1_obj, key2); + } + return; + } + + // read any existing script as a PyUnicode string + if (!key2 || !key1_obj) { + script = JM_get_script(ctx, key1_obj); + } else { + script = JM_get_script(ctx, pdf_dict_get(ctx, key1_obj, key2)); + } + + // replace old script, if different from new one + if (!PyObject_RichCompareBool(value, script, Py_EQ)) { + pdf_obj *newaction = JM_new_javascript(ctx, pdf, value); + if (!key2) { + pdf_dict_put_drop(ctx, annot_obj, key1, newaction); + } else { + pdf_dict_putl_drop(ctx, annot_obj, newaction, key1, key2, NULL); + } + } + Py_XDECREF(script); + return; +} + +/* +// Execute a JavaScript action for annot or field. +//----------------------------------------------------------------------------- +PyObject * +JM_exec_script(fz_context *ctx, pdf_obj *annot_obj, pdf_obj *key1, pdf_obj *key2) +{ + PyObject *script = NULL; + char *code = NULL; + fz_try(ctx) { + pdf_document *pdf = pdf_get_bound_document(ctx, annot_obj); + char buf[100]; + if (!key2) { + script = JM_get_script(ctx, key1_obj); + } else { + script = JM_get_script(ctx, pdf_dict_get(ctx, key1_obj, key2)); + } + code = JM_Python_str_AsChar(script); + fz_snprintf(buf, sizeof buf, "%d/A", pdf_to_num(ctx, annot_obj)); + pdf_js_execute(pdf->js, buf, code); + } + fz_always(ctx) { + JM_Python_str_DelForPy3(code); + Py_XDECREF(string); + } + fz_catch(ctx) { + Py_RETURN_FALSE; + } + Py_RETURN_TRUE; +} +*/ + +// String from widget type +//----------------------------------------------------------------------------- +char *JM_field_type_text(int wtype) +{ + switch(wtype) { + case(PDF_WIDGET_TYPE_BUTTON): + return "Button"; + case(PDF_WIDGET_TYPE_CHECKBOX): + return "CheckBox"; + case(PDF_WIDGET_TYPE_RADIOBUTTON): + return "RadioButton"; + case(PDF_WIDGET_TYPE_TEXT): + return "Text"; + case(PDF_WIDGET_TYPE_LISTBOX): + return "ListBox"; + case(PDF_WIDGET_TYPE_COMBOBOX): + return "ComboBox"; + case(PDF_WIDGET_TYPE_SIGNATURE): + return "Signature"; + default: + return "unknown"; + } +} + +// Set the field type +//----------------------------------------------------------------------------- +void JM_set_field_type(fz_context *ctx, pdf_document *doc, pdf_obj *obj, int type) +{ + int setbits = 0; + int clearbits = 0; + pdf_obj *typename = NULL; + + switch(type) { + case PDF_WIDGET_TYPE_BUTTON: + typename = PDF_NAME(Btn); + setbits = PDF_BTN_FIELD_IS_PUSHBUTTON; + break; + case PDF_WIDGET_TYPE_CHECKBOX: + typename = PDF_NAME(Btn); + clearbits = PDF_BTN_FIELD_IS_PUSHBUTTON; + setbits = PDF_BTN_FIELD_IS_RADIO; + break; + case PDF_WIDGET_TYPE_RADIOBUTTON: + typename = PDF_NAME(Btn); + clearbits = (PDF_BTN_FIELD_IS_PUSHBUTTON|PDF_BTN_FIELD_IS_RADIO); + break; + case PDF_WIDGET_TYPE_TEXT: + typename = PDF_NAME(Tx); + break; + case PDF_WIDGET_TYPE_LISTBOX: + typename = PDF_NAME(Ch); + clearbits = PDF_CH_FIELD_IS_COMBO; + break; + case PDF_WIDGET_TYPE_COMBOBOX: + typename = PDF_NAME(Ch); + setbits = PDF_CH_FIELD_IS_COMBO; + break; + case PDF_WIDGET_TYPE_SIGNATURE: + typename = PDF_NAME(Sig); + break; + } + + if (typename) + pdf_dict_put_drop(ctx, obj, PDF_NAME(FT), typename); + + if (setbits != 0 || clearbits != 0) { + int bits = pdf_dict_get_int(ctx, obj, PDF_NAME(Ff)); + bits &= ~clearbits; + bits |= setbits; + pdf_dict_put_int(ctx, obj, PDF_NAME(Ff), bits); + } +} + +// Copied from MuPDF v1.14 +// Create widget +//----------------------------------------------------------------------------- +pdf_annot *JM_create_widget(fz_context *ctx, pdf_document *doc, pdf_page *page, int type, char *fieldname) +{ + pdf_obj *form = NULL; + int old_sigflags = pdf_to_int(ctx, pdf_dict_getp(ctx, pdf_trailer(ctx, doc), "Root/AcroForm/SigFlags")); + pdf_annot *annot = pdf_create_annot_raw(ctx, page, PDF_ANNOT_WIDGET); + + fz_try(ctx) { + JM_set_field_type(ctx, doc, annot->obj, type); + pdf_dict_put_text_string(ctx, annot->obj, PDF_NAME(T), fieldname); + + if (type == PDF_WIDGET_TYPE_SIGNATURE) { + int sigflags = (old_sigflags | (SigFlag_SignaturesExist|SigFlag_AppendOnly)); + pdf_dict_putl_drop(ctx, pdf_trailer(ctx, doc), pdf_new_int(ctx, sigflags), PDF_NAME(Root), PDF_NAME(AcroForm), PDF_NAME(SigFlags), NULL); + } + + /* + pdf_create_annot will have linked the new widget into the page's + annot array. We also need it linked into the document's form + */ + form = pdf_dict_getp(ctx, pdf_trailer(ctx, doc), "Root/AcroForm/Fields"); + if (!form) { + form = pdf_new_array(ctx, doc, 1); + pdf_dict_putl_drop(ctx, pdf_trailer(ctx, doc), + form, + PDF_NAME(Root), + PDF_NAME(AcroForm), + PDF_NAME(Fields), + NULL); + } + + pdf_array_push(ctx, form, annot->obj); // Cleanup relies on this statement being last + } + fz_catch(ctx) { + pdf_delete_annot(ctx, page, annot); + + if (type == PDF_WIDGET_TYPE_SIGNATURE) { + pdf_dict_putl_drop(ctx, pdf_trailer(ctx, doc), pdf_new_int(ctx, old_sigflags), PDF_NAME(Root), PDF_NAME(AcroForm), PDF_NAME(SigFlags), NULL); + } + + fz_rethrow(ctx); + } + + return annot; +} + + +// PushButton get state +//----------------------------------------------------------------------------- +PyObject *JM_pushbtn_state(fz_context *ctx, pdf_annot *annot) +{ // pushed buttons do not reflect status changes in the PDF + // always reflect them as untouched + Py_RETURN_FALSE; +} + +// CheckBox get state +//----------------------------------------------------------------------------- +PyObject *JM_checkbox_state(fz_context *ctx, pdf_annot *annot) +{ + pdf_obj *leafv = pdf_dict_get_inheritable(ctx, annot->obj, PDF_NAME(V)); + pdf_obj *leafas = pdf_dict_get_inheritable(ctx, annot->obj, PDF_NAME(AS)); + if (!leafv) Py_RETURN_FALSE; + if (leafv == PDF_NAME(Off)) Py_RETURN_FALSE; + if (leafv == pdf_new_name(ctx, "Yes")) + Py_RETURN_TRUE; + if (pdf_is_string(ctx, leafv) && !strcmp(pdf_to_text_string(ctx, leafv), "Off")) + Py_RETURN_FALSE; + if (pdf_is_string(ctx, leafv) && !strcmp(pdf_to_text_string(ctx, leafv), "Yes")) + Py_RETURN_TRUE; + if (leafas && leafas == PDF_NAME(Off)) Py_RETURN_FALSE; + Py_RETURN_TRUE; +} + +// RadioBox get state +//----------------------------------------------------------------------------- +PyObject *JM_radiobtn_state(fz_context *ctx, pdf_annot *annot) +{ // MuPDF treats radio buttons like check boxes - hence so do we + return JM_checkbox_state(ctx, annot); +} + +// Text field retrieve value +//----------------------------------------------------------------------------- +PyObject *JM_text_value(fz_context *ctx, pdf_annot *annot) +{ + const char *text = NULL; + fz_var(text); + fz_try(ctx) + text = pdf_field_value(ctx, annot->obj); + fz_catch(ctx) Py_RETURN_NONE; + return JM_UnicodeFromStr(text); +} + +// ListBox retrieve value +//----------------------------------------------------------------------------- +PyObject *JM_listbox_value(fz_context *ctx, pdf_annot *annot) +{ + int i = 0, n = 0; + // may be single value or array + pdf_obj *optarr = pdf_dict_get(ctx, annot->obj, PDF_NAME(V)); + if (pdf_is_string(ctx, optarr)) // a single string + return PyString_FromString(pdf_to_text_string(ctx, optarr)); + + // value is an array (may have len 0) + n = pdf_array_len(ctx, optarr); + PyObject *liste = PyList_New(0); + + // extract a list of strings + // each entry may again be an array: take second entry then + for (i = 0; i < n; i++) { + pdf_obj *elem = pdf_array_get(ctx, optarr, i); + if (pdf_is_array(ctx, elem)) + elem = pdf_array_get(ctx, elem, 1); + LIST_APPEND_DROP(liste, JM_UnicodeFromStr(pdf_to_text_string(ctx, elem))); + } + return liste; +} + +// ComboBox retrieve value +//----------------------------------------------------------------------------- +PyObject *JM_combobox_value(fz_context *ctx, pdf_annot *annot) +{ // combobox treated like listbox + return JM_listbox_value(ctx, annot); +} + +// Signature field retrieve value +PyObject *JM_signature_value(fz_context *ctx, pdf_annot *annot) +{ // signatures are currently not supported + Py_RETURN_NONE; +} + +// retrieve ListBox / ComboBox choice values +//----------------------------------------------------------------------------- +PyObject *JM_choice_options(fz_context *ctx, pdf_annot *annot) +{ // return list of choices for list or combo boxes + pdf_document *pdf = pdf_get_bound_document(ctx, annot->obj); + PyObject *val; + int n = pdf_choice_widget_options(ctx, (pdf_widget *) annot, 0, NULL); + if (n == 0) Py_RETURN_NONE; // wrong widget type + + pdf_obj *optarr = pdf_dict_get(ctx, annot->obj, PDF_NAME(Opt)); + int i, m; + PyObject *liste = PyList_New(0); + + for (i = 0; i < n; i++) { + m = pdf_array_len(ctx, pdf_array_get(ctx, optarr, i)); + if (m == 2) { + val = Py_BuildValue("ss", + pdf_to_text_string(ctx, pdf_array_get(ctx, pdf_array_get(ctx, optarr, i), 0)), + pdf_to_text_string(ctx, pdf_array_get(ctx, pdf_array_get(ctx, optarr, i), 1))); + LIST_APPEND_DROP(liste, val); + } else { + val = JM_UnicodeFromStr(pdf_to_text_string(ctx, pdf_array_get(ctx, optarr, i))); + LIST_APPEND_DROP(liste, val); + } + } + return liste; +} + +// set ListBox / ComboBox values +//----------------------------------------------------------------------------- +void JM_set_choice_options(fz_context *ctx, pdf_annot *annot, PyObject *liste) +{ + if (!liste) return; + if (!PySequence_Check(liste)) return; + Py_ssize_t i, n = PySequence_Size(liste); + if (n < 1) return; + pdf_document *pdf = pdf_get_bound_document(ctx, annot->obj); + char *opt = NULL; + pdf_obj *optarr = pdf_new_array(ctx, pdf, n); + PyObject *val = NULL; + for (i = 0; i < n; i++) { + val = PySequence_ITEM(liste, i); + opt = JM_Python_str_AsChar(val); + pdf_array_push_text_string(ctx, optarr, (const char *) opt); + JM_Python_str_DelForPy3(opt); + Py_CLEAR(val); + } + + pdf_dict_put(ctx, annot->obj, PDF_NAME(Opt), optarr); + return; +} + +//----------------------------------------------------------------------------- +// Populate a Python Widget object with the values from a PDF form field. +// Called by "Page.firstWidget" and "Widget.next". +//----------------------------------------------------------------------------- +void JM_get_widget_properties(fz_context *ctx, pdf_annot *annot, PyObject *Widget) +{ + pdf_document *pdf = annot->page->doc; + pdf_widget *tw = (pdf_widget *) annot; + pdf_obj *obj = NULL, *js = NULL, *o = NULL; + fz_buffer *res = NULL; + Py_ssize_t i = 0, n = 0; + fz_try(ctx) { + int field_type = pdf_widget_type(gctx, tw); + SETATTR_DROP(Widget, "field_type", Py_BuildValue("i", field_type)); + if (field_type == PDF_WIDGET_TYPE_SIGNATURE) { + if (pdf_signature_is_signed(ctx, pdf, annot->obj)) { + SETATTR("is_signed", Py_True); + } else { + SETATTR("is_signed", Py_False); + } + } else { + SETATTR("is_signed", Py_None); + } + SETATTR_DROP(Widget, "border_style", + JM_UnicodeFromStr(pdf_field_border_style(ctx, annot->obj))); + SETATTR_DROP(Widget, "field_type_string", + JM_UnicodeFromStr(JM_field_type_text(field_type))); + + char *field_name = pdf_field_name(ctx, annot->obj); + SETATTR_DROP(Widget, "field_name", JM_UnicodeFromStr(field_name)); + JM_Free(field_name); + + const char *label = NULL; + obj = pdf_dict_get(ctx, annot->obj, PDF_NAME(TU)); + if (obj) label = pdf_to_text_string(ctx, obj); + SETATTR_DROP(Widget, "field_label", JM_UnicodeFromStr(label)); + + SETATTR_DROP(Widget, "field_value", + JM_UnicodeFromStr(pdf_field_value(ctx, annot->obj))); + + SETATTR_DROP(Widget, "field_display", + Py_BuildValue("i", pdf_field_display(ctx, annot->obj))); + + float border_width = pdf_to_real(ctx, pdf_dict_getl(ctx, annot->obj, + PDF_NAME(BS), PDF_NAME(W), NULL)); + if (border_width == 0) border_width = 1; + SETATTR_DROP(Widget, "border_width", + Py_BuildValue("f", border_width)); + + obj = pdf_dict_getl(ctx, annot->obj, + PDF_NAME(BS), PDF_NAME(D), NULL); + if (pdf_is_array(ctx, obj)) { + n = (Py_ssize_t) pdf_array_len(ctx, obj); + PyObject *d = PyList_New(n); + for (i = 0; i < n; i++) { + PyList_SET_ITEM(d, i, Py_BuildValue("i", pdf_to_int(ctx, + pdf_array_get(ctx, obj, (int) i)))); + } + SETATTR_DROP(Widget, "border_dashes", d); + } + + SETATTR_DROP(Widget, "text_maxlen", + Py_BuildValue("i", pdf_text_widget_max_len(ctx, tw))); + + SETATTR_DROP(Widget, "text_format", + Py_BuildValue("i", pdf_text_widget_format(ctx, tw))); + + obj = pdf_dict_getl(ctx, annot->obj, PDF_NAME(MK), PDF_NAME(BG), NULL); + if (pdf_is_array(ctx, obj)) { + n = (Py_ssize_t) pdf_array_len(ctx, obj); + PyObject *col = PyList_New(n); + for (i = 0; i < n; i++) { + PyList_SET_ITEM(col, i, Py_BuildValue("f", + pdf_to_real(ctx, pdf_array_get(ctx, obj, (int) i)))); + } + SETATTR_DROP(Widget, "fill_color", col); + } + + obj = pdf_dict_getl(ctx, annot->obj, PDF_NAME(MK), PDF_NAME(BC), NULL); + if (pdf_is_array(ctx, obj)) { + n = (Py_ssize_t) pdf_array_len(ctx, obj); + PyObject *col = PyList_New(n); + for (i = 0; i < n; i++) { + PyList_SET_ITEM(col, i, Py_BuildValue("f", + pdf_to_real(ctx, pdf_array_get(ctx, obj, (int) i)))); + } + SETATTR_DROP(Widget, "border_color", col); + } + + SETATTR_DROP(Widget, "choice_values", JM_choice_options(ctx, annot)); + + const char *da = pdf_to_text_string(ctx, pdf_dict_get_inheritable(ctx, + annot->obj, PDF_NAME(DA))); + SETATTR_DROP(Widget, "_text_da", JM_UnicodeFromStr(da)); + + obj = pdf_dict_getl(ctx, annot->obj, PDF_NAME(MK), PDF_NAME(CA), NULL); + if (obj) { + SETATTR_DROP(Widget, "button_caption", + JM_UnicodeFromStr((char *)pdf_to_text_string(ctx, obj))); + } + + SETATTR_DROP(Widget, "field_flags", + Py_BuildValue("i", pdf_field_flags(ctx, annot->obj))); + + // call Py method to reconstruct text color, font name, size + PyObject *call = CALLATTR("_parse_da", NULL); + Py_XDECREF(call); + + // extract JavaScript action texts + SETATTR_DROP(Widget, "script", + JM_get_script(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME(A)))); + + SETATTR_DROP(Widget, "script_stroke", + JM_get_script(ctx, pdf_dict_getl(ctx, annot->obj, PDF_NAME(AA), PDF_NAME(K), NULL))); + + SETATTR_DROP(Widget, "script_format", + JM_get_script(ctx, pdf_dict_getl(ctx, annot->obj, PDF_NAME(AA), PDF_NAME(F), NULL))); + + SETATTR_DROP(Widget, "script_change", + JM_get_script(ctx, pdf_dict_getl(ctx, annot->obj, PDF_NAME(AA), PDF_NAME(V), NULL))); + + SETATTR_DROP(Widget, "script_calc", + JM_get_script(ctx, pdf_dict_getl(ctx, annot->obj, PDF_NAME(AA), PDF_NAME(C), NULL))); + } + fz_always(ctx) PyErr_Clear(); + fz_catch(ctx) fz_rethrow(ctx); + return; +} + + +//----------------------------------------------------------------------------- +// Update the PDF form field with the properties from a Python Widget object. +// Called by "Page.addWidget" and "Annot.updateWidget". +//----------------------------------------------------------------------------- +void JM_set_widget_properties(fz_context *ctx, pdf_annot *annot, PyObject *Widget) +{ + pdf_document *pdf = annot->page->doc; + pdf_page *page = annot->page; + fz_rect rect; + pdf_obj *fill_col = NULL, *border_col = NULL; + pdf_obj *dashes = NULL; + Py_ssize_t i, n = 0; + int d; + int result = 0; + PyObject *value = GETATTR("field_type"); + int field_type = (int) PyInt_AsLong(value); + Py_DECREF(value); + + // rectangle -------------------------------------------------------------- + value = GETATTR("rect"); + rect = JM_rect_from_py(value); + Py_XDECREF(value); + fz_matrix rot_mat = JM_rotate_page_matrix(ctx, page); + rect = fz_transform_rect(rect, rot_mat); + pdf_set_annot_rect(ctx, annot, rect); + + // fill color ------------------------------------------------------------- + value = GETATTR("fill_color"); + if (value && PySequence_Check(value)) { + n = PySequence_Size(value); + fill_col = pdf_new_array(ctx, pdf, n); + float col = 0; + for (i = 0; i < n; i++) { + JM_FLOAT_ITEM(value, i, &col); + pdf_array_push_real(ctx, fill_col, col); + } + pdf_field_set_fill_color(ctx, annot->obj, fill_col); + pdf_drop_obj(ctx, fill_col); + } + Py_XDECREF(value); + + // dashes ----------------------------------------------------------------- + value = GETATTR("border_dashes"); + if (value && PySequence_Check(value)) { + n = PySequence_Size(value); + dashes = pdf_new_array(ctx, pdf, n); + for (i = 0; i < n; i++) { + pdf_array_push_int(ctx, dashes, + (int64_t) PyInt_AsLong(PySequence_ITEM(value, i))); + } + pdf_dict_putl_drop(ctx, annot->obj, dashes, + PDF_NAME(BS), + PDF_NAME(D), + NULL); + } + Py_XDECREF(value); + + // border color ----------------------------------------------------------- + value = GETATTR("border_color"); + if (value && PySequence_Check(value)) { + n = PySequence_Size(value); + border_col = pdf_new_array(ctx, pdf, n); + float col = 0; + for (i = 0; i < n; i++) { + JM_FLOAT_ITEM(value, i, &col); + pdf_array_push_real(ctx, border_col, col); + } + pdf_dict_putl_drop(ctx, annot->obj, border_col, + PDF_NAME(MK), + PDF_NAME(BC), + NULL); + } + Py_XDECREF(value); + + // entry ignored - may be used later + /* + int text_format = (int) PyInt_AsLong(GETATTR("text_format")); + */ + + // field label ----------------------------------------------------------- + value = GETATTR("field_label"); + if (value != Py_None) { + char *label = JM_Python_str_AsChar(value); + pdf_dict_put_text_string(ctx, annot->obj, PDF_NAME(TU), label); + JM_Python_str_DelForPy3(label); + } + Py_XDECREF(value); + + // field name ------------------------------------------------------------- + value = GETATTR("field_name"); + if (value != Py_None) { + char *name = JM_Python_str_AsChar(value); + char *old_name = pdf_field_name(ctx, annot->obj); + if (strcmp(name, old_name) != 0) { + pdf_dict_put_text_string(ctx, annot->obj, PDF_NAME(T), name); + } + JM_Python_str_DelForPy3(name); + JM_Free(old_name); + } + Py_XDECREF(value); + + // max text len ----------------------------------------------------------- + if (field_type == PDF_WIDGET_TYPE_TEXT) + { + value = GETATTR("text_maxlen"); + int text_maxlen = (int) PyInt_AsLong(value); + if (text_maxlen) { + pdf_dict_put_int(ctx, annot->obj, PDF_NAME(MaxLen), text_maxlen); + } + Py_XDECREF(value); + } + value = GETATTR("field_display"); + d = (int) PyInt_AsLong(value); + Py_XDECREF(value); + pdf_field_set_display(ctx, annot->obj, d); + + // choice values ---------------------------------------------------------- + if (field_type == PDF_WIDGET_TYPE_LISTBOX || + field_type == PDF_WIDGET_TYPE_COMBOBOX) { + value = GETATTR("choice_values"); + JM_set_choice_options(ctx, annot, value); + Py_XDECREF(value); + } + + // border style ----------------------------------------------------------- + value = GETATTR("border_style"); + pdf_obj *val = JM_get_border_style(ctx, value); + Py_XDECREF(value); + pdf_dict_putl_drop(ctx, annot->obj, val, + PDF_NAME(BS), + PDF_NAME(S), + NULL); + + // border width ----------------------------------------------------------- + value = GETATTR("border_width"); + float border_width = (float) PyFloat_AsDouble(value); + Py_XDECREF(value); + pdf_dict_putl_drop(ctx, annot->obj, pdf_new_real(ctx, border_width), + PDF_NAME(BS), + PDF_NAME(W), + NULL); + + // /DA string ------------------------------------------------------------- + value = GETATTR("_text_da"); + char *da = JM_Python_str_AsChar(value); + Py_XDECREF(value); + pdf_dict_put_text_string(ctx, annot->obj, PDF_NAME(DA), da); + JM_Python_str_DelForPy3(da); + pdf_dict_del(ctx, annot->obj, PDF_NAME(DS)); /* not supported by MuPDF */ + pdf_dict_del(ctx, annot->obj, PDF_NAME(RC)); /* not supported by MuPDF */ + + // field flags ------------------------------------------------------------ + int field_flags = 0, Ff = 0; + if (field_type != PDF_WIDGET_TYPE_CHECKBOX) { + value = GETATTR("field_flags"); + field_flags = (int) PyInt_AsLong(value); + if (!PyErr_Occurred()) { + Ff = pdf_field_flags(ctx, annot->obj); + Ff |= field_flags; + } + Py_XDECREF(value); + } + pdf_dict_put_int(ctx, annot->obj, PDF_NAME(Ff), Ff); + + // button caption --------------------------------------------------------- + value = GETATTR("button_caption"); + char *ca = JM_Python_str_AsChar(value); + Py_XDECREF(value); + if (ca) { + pdf_field_set_button_caption(ctx, annot->obj, ca); + JM_Python_str_DelForPy3(ca); + } + + // script (/A) ------------------------------------------------------- + value = GETATTR("script"); + JM_put_script(ctx, annot->obj, PDF_NAME(A), NULL, value); + Py_CLEAR(value); + + // script (/AA/K) ------------------------------------------------------- + value = GETATTR("script_stroke"); + JM_put_script(ctx, annot->obj, PDF_NAME(AA), PDF_NAME(K), value); + Py_CLEAR(value); + + // script (/AA/F) ------------------------------------------------------- + value = GETATTR("script_format"); + JM_put_script(ctx, annot->obj, PDF_NAME(AA), PDF_NAME(F), value); + Py_CLEAR(value); + + // script (/AA/V) ------------------------------------------------------- + value = GETATTR("script_change"); + JM_put_script(ctx, annot->obj, PDF_NAME(AA), PDF_NAME(V), value); + Py_CLEAR(value); + + // script (/AA/C) ------------------------------------------------------- + value = GETATTR("script_calc"); + JM_put_script(ctx, annot->obj, PDF_NAME(AA), PDF_NAME(C), value); + Py_CLEAR(value); + + // field value ------------------------------------------------------------ + // MuPDF function "pdf_set_field_value" always sets strings. For button + // fields this may lead to an unrecognized state for some PDF viewers. + //------------------------------------------------------------------------- + value = GETATTR("field_value"); + char *text = NULL; + switch(field_type) + { + case PDF_WIDGET_TYPE_CHECKBOX: + case PDF_WIDGET_TYPE_RADIOBUTTON: + if (PyObject_RichCompareBool(value, Py_True, Py_EQ)) { + result = pdf_set_field_value(ctx, pdf, annot->obj, "Yes", 1); + pdf_dict_put_name(ctx, annot->obj, PDF_NAME(V), "Yes"); + } else { + result = pdf_set_field_value(ctx, pdf, annot->obj, "Off", 1); + pdf_dict_put(ctx, annot->obj, PDF_NAME(V), PDF_NAME(Off)); + } + break; + default: + text = JM_Python_str_AsChar(value); + if (text) { + result = pdf_set_field_value(ctx, pdf, annot->obj, (const char *)text, 1); + JM_Python_str_DelForPy3(text); + } + } + Py_CLEAR(value); + PyErr_Clear(); + pdf_dirty_annot(ctx, annot); + annot->is_hot = 1; + annot->is_active = 1; + pdf_update_appearance(ctx, annot); +} +#undef SETATTR +#undef GETATTR +#undef CALLATTR +%} + +%pythoncode %{ +#------------------------------------------------------------------------------ +# Class describing a PDF form field ("widget") +#------------------------------------------------------------------------------ +class Widget(object): + def __init__(self): + self.border_color = None + self.border_style = "S" + self.border_width = 0 + self.border_dashes = None + self.choice_values = None # choice fields only + + self.field_name = None # field name + self.field_label = None # field label + self.field_value = None + self.field_flags = None + self.field_display = 0 + self.field_type = 0 # valid range 1 through 7 + self.field_type_string = None # field type as string + + self.fill_color = None + self.button_caption = None # button caption + self.is_signed = None # True / False if signature + self.text_color = (0, 0, 0) + self.text_font = "Helv" + self.text_fontsize = 0 + self.text_maxlen = 0 # text fields only + self.text_format = 0 # text fields only + self._text_da = "" # /DA = default apparance + + self.script = None # JavaScript (/A) + self.script_stroke = None # JavaScript (/AA/K) + self.script_format = None # JavaScript (/AA/F) + self.script_change = None # JavaScript (/AA/V) + self.script_calc = None # JavaScript (/AA/C) + + self.rect = None # annot value + self.xref = 0 # annot value + + + def _validate(self): + """Validate the class entries. + """ + if (self.rect.isInfinite + or self.rect.isEmpty + ): + raise ValueError("bad rect") + + if not self.field_name: + raise ValueError("field name missing") + + if self.field_label == "Unnamed": + self.field_label = None + CheckColor(self.border_color) + CheckColor(self.fill_color) + if not self.text_color: + self.text_color = (0, 0, 0) + CheckColor(self.text_color) + + if not self.border_width: + self.border_width = 0 + + if not self.text_fontsize: + self.text_fontsize = 0 + + self.border_style = self.border_style.upper()[0:1] + + # standardize content of JavaScript entries + btn_type = self.field_type in ( + PDF_WIDGET_TYPE_BUTTON, + PDF_WIDGET_TYPE_CHECKBOX, + PDF_WIDGET_TYPE_RADIOBUTTON + ) + if not self.script: + self.script = None + elif type(self.script) not in string_types: + raise ValueError("script content must be unicode") + + # buttons cannot have the following script actions + if btn_type or not self.script_calc: + self.script_calc = None + elif type(self.script_calc) not in string_types: + raise ValueError("script_calc content must be unicode") + + if btn_type or not self.script_change: + self.script_change = None + elif type(self.script_change) not in string_types: + raise ValueError("script_change content must be unicode") + + if btn_type or not self.script_format: + self.script_format = None + elif type(self.script_format) not in string_types: + raise ValueError("script_format content must be unicode") + + if btn_type or not self.script_stroke: + self.script_stroke = None + elif type(self.script_stroke) not in string_types: + raise ValueError("script_stroke content must be unicode") + + self._checker() # any field_type specific checks + + + def _adjust_font(self): + """Ensure text_font is from our list and correctly spelled. + """ + if not self.text_font: + self.text_font = "Helv" + return + valid_fonts = ("Cour", "TiRo", "Helv", "ZaDb") + for f in valid_fonts: + if self.text_font.lower() == f.lower(): + self.text_font = f + return + self.text_font = "Helv" + return + + + def _parse_da(self): + """Extract font name, size and color from default appearance string (/DA object). + + Equivalent to 'pdf_parse_default_appearance' function in MuPDF's 'pdf-annot.c'. + """ + if not self._text_da: + return + font = "Helv" + fsize = 0 + col = (0, 0, 0) + dat = self._text_da.split() # split on any whitespace + for i, item in enumerate(dat): + if item == "Tf": + font = dat[i - 2][1:] + fsize = float(dat[i - 1]) + dat[i] = dat[i-1] = dat[i-2] = "" + continue + if item == "g": # unicolor text + col = [(float(dat[i - 1]))] + dat[i] = dat[i-1] = "" + continue + if item == "rg": # RGB colored text + col = [float(f) for f in dat[i - 3:i]] + dat[i] = dat[i-1] = dat[i-2] = dat[i-3] = "" + continue + self.text_font = font + self.text_fontsize = fsize + self.text_color = col + self._text_da = "" + return + + + def _checker(self): + """Any widget type checks. + """ + if self.field_type not in range(1, 8): + raise ValueError("bad field type") + + + def update(self): + """Reflect Python object in the PDF. + """ + doc = self.parent.parent + self._validate() + + self._adjust_font() # ensure valid text_font name + + # now create the /DA string + self._text_da = "" + if len(self.text_color) == 3: + fmt = "{:g} {:g} {:g} rg /{f:s} {s:g} Tf" + self._text_da + elif len(self.text_color) == 1: + fmt = "{:g} g /{f:s} {s:g} Tf" + self._text_da + elif len(self.text_color) == 4: + fmt = "{:g} {:g} {:g} {:g} k /{f:s} {s:g} Tf" + self._text_da + self._text_da = fmt.format(*self.text_color, f=self.text_font, + s=self.text_fontsize) + # finally update the widget + + TOOLS._save_widget(self._annot, self) + self._text_da = "" + + def reset(self): + """Reset the field value to its default. + """ + TOOLS._reset_widget(self._annot) + + def __repr__(self): + return "'%s' widget on %s" % (self.field_type_string, str(self.parent)) + + def __del__(self): + self._annot.__del__() + + @property + def next(self): + return self._annot.next +%} diff --git a/fitz/helper-geo-c.i b/fitz/helper-geo-c.i new file mode 100644 index 0000000..97f22f4 --- /dev/null +++ b/fitz/helper-geo-c.i @@ -0,0 +1,196 @@ +%{ + +//----------------------------------------------------------------------------- +// Functions converting betwenn PySequences and fitz geometry objects +//----------------------------------------------------------------------------- +static int +JM_INT_ITEM(PyObject *obj, Py_ssize_t idx, int *result) +{ + PyObject *temp = PySequence_ITEM(obj, idx); + if (!temp) return 1; + *result = (int) PyLong_AsLong(temp); + Py_DECREF(temp); + if (PyErr_Occurred()) { + PyErr_Clear(); + return 1; + } + return 0; +} + +static int +JM_FLOAT_ITEM(PyObject *obj, Py_ssize_t idx, float *result) +{ + PyObject *temp = PySequence_ITEM(obj, idx); + if (!temp) return 1; + *result = (float) PyFloat_AsDouble(temp); + Py_DECREF(temp); + if (PyErr_Occurred()) { + PyErr_Clear(); + return 1; + } + return 0; +} + +//----------------------------------------------------------------------------- +// PySequence to fz_rect. Default: infinite rect +//----------------------------------------------------------------------------- +static fz_rect +JM_rect_from_py(PyObject *r) +{ + if (!r || !PySequence_Check(r) || PySequence_Size(r) != 4) + return fz_infinite_rect; + Py_ssize_t i; + float f[4]; + + for (i = 0; i < 4; i++) + if (JM_FLOAT_ITEM(r, i, &f[i]) == 1) return fz_infinite_rect; + + return fz_make_rect(f[0], f[1], f[2], f[3]); +} + +//----------------------------------------------------------------------------- +// PySequence from fz_rect +//----------------------------------------------------------------------------- +static PyObject * +JM_py_from_rect(fz_rect r) +{ + return Py_BuildValue("ffff", r.x0, r.y0, r.x1, r.y1); +} + +//----------------------------------------------------------------------------- +// PySequence to fz_irect. Default: infinite irect +//----------------------------------------------------------------------------- +static fz_irect +JM_irect_from_py(PyObject *r) +{ + if (!PySequence_Check(r) || PySequence_Size(r) != 4) + return fz_infinite_irect; + int x[4]; + Py_ssize_t i; + + for (i = 0; i < 4; i++) + if (JM_INT_ITEM(r, i, &x[i]) == 1) return fz_infinite_irect; + + return fz_make_irect(x[0], x[1], x[2], x[3]); +} + +//----------------------------------------------------------------------------- +// PySequence from fz_irect +//----------------------------------------------------------------------------- +static PyObject * +JM_py_from_irect(fz_irect r) +{ + return Py_BuildValue("iiii", r.x0, r.y0, r.x1, r.y1); +} + + +//----------------------------------------------------------------------------- +// PySequence to fz_point. Default: (0, 0) +//----------------------------------------------------------------------------- +static fz_point +JM_point_from_py(PyObject *p) +{ + fz_point p0 = fz_make_point(0, 0); + float x, y; + + if (!p || !PySequence_Check(p) || PySequence_Size(p) != 2) + return p0; + + if (JM_FLOAT_ITEM(p, 0, &x) == 1) return p0; + if (JM_FLOAT_ITEM(p, 1, &y) == 1) return p0; + + return fz_make_point(x, y); +} + +//----------------------------------------------------------------------------- +// PySequence from fz_point +//----------------------------------------------------------------------------- +static PyObject * +JM_py_from_point(fz_point p) +{ + return Py_BuildValue("ff", p.x, p.y); +} + + +//----------------------------------------------------------------------------- +// PySequence to fz_matrix. Default: fz_identity +//----------------------------------------------------------------------------- +static fz_matrix +JM_matrix_from_py(PyObject *m) +{ + Py_ssize_t i; + float a[6]; + + if (!m || !PySequence_Check(m) || PySequence_Size(m) != 6) + return fz_identity; + + for (i = 0; i < 6; i++) + if (JM_FLOAT_ITEM(m, i, &a[i]) == 1) return fz_identity; + + return fz_make_matrix(a[0], a[1], a[2], a[3], a[4], a[5]); +} + +//----------------------------------------------------------------------------- +// PySequence from fz_matrix +//----------------------------------------------------------------------------- +static PyObject * +JM_py_from_matrix(fz_matrix m) +{ + return Py_BuildValue("ffffff", m.a, m.b, m.c, m.d, m.e, m.f); +} + +//----------------------------------------------------------------------------- +// fz_quad from PySequence. Four floats are treated as rect. +// Else must be four pairs of floats. +//----------------------------------------------------------------------------- +static fz_quad +JM_quad_from_py(PyObject *r) +{ + fz_quad q = fz_make_quad(0, 0, 0, 0, 0, 0, 0, 0); + fz_point p[4]; + float test; + Py_ssize_t i; + PyObject *obj = NULL; + + if (!r || !PySequence_Check(r) || PySequence_Size(r) != 4) + return q; + + if (JM_FLOAT_ITEM(r, 0, &test) == 0) + return fz_quad_from_rect(JM_rect_from_py(r)); + + for (i = 0; i < 4; i++) { + obj = PySequence_ITEM(r, i); // next point item + if (!obj || !PySequence_Check(obj) || PySequence_Size(obj) != 2) + goto exit_result; // invalid: cancel the rest + + if (JM_FLOAT_ITEM(obj, 0, &p[i].x) == 1) goto exit_result; + if (JM_FLOAT_ITEM(obj, 1, &p[i].y) == 1) goto exit_result; + + Py_CLEAR(obj); + } + q.ul = p[0]; + q.ur = p[1]; + q.ll = p[2]; + q.lr = p[3]; + return q; + + exit_result:; + Py_CLEAR(obj); + return q; +} + +//----------------------------------------------------------------------------- +// PySequence from fz_quad. +//----------------------------------------------------------------------------- +static PyObject * +JM_py_from_quad(fz_quad quad) +{ + PyObject *pquad = PyTuple_New(4); + PyTuple_SET_ITEM(pquad, 0, JM_py_from_point(quad.ul)); + PyTuple_SET_ITEM(pquad, 1, JM_py_from_point(quad.ur)); + PyTuple_SET_ITEM(pquad, 2, JM_py_from_point(quad.ll)); + PyTuple_SET_ITEM(pquad, 3, JM_py_from_point(quad.lr)); + return pquad; +} + +%} diff --git a/fitz/helper-geo-py.i b/fitz/helper-geo-py.i new file mode 100644 index 0000000..6f8fa06 --- /dev/null +++ b/fitz/helper-geo-py.i @@ -0,0 +1,983 @@ +%pythoncode %{ +class Matrix(object): + """Matrix() - all zeros + Matrix(a, b, c, d, e, f) + Matrix(zoom-x, zoom-y) - zoom + Matrix(shear-x, shear-y, 1) - shear + Matrix(degree) - rotate + Matrix(Matrix) - new copy + Matrix(sequence) - from 'sequence'""" + def __init__(self, *args): + if not args: + self.a = self.b = self.c = self.d = self.e = self.f = 0.0 + return None + if len(args) > 6: + raise ValueError("bad sequ. length") + if len(args) == 6: # 6 numbers + self.a, self.b, self.c, self.d, self.e, self.f = map(float, args) + return None + if len(args) == 1: # either an angle or a sequ + if hasattr(args[0], "__float__"): + theta = math.radians(args[0]) + c = round(math.cos(theta), 8) + s = round(math.sin(theta), 8) + self.a = self.d = c + self.b = s + self.c = -s + self.e = self.f = 0.0 + return None + else: + self.a, self.b, self.c, self.d, self.e, self.f = map(float, args[0]) + return None + if len(args) == 2 or len(args) == 3 and args[2] == 0: + self.a, self.b, self.c, self.d, self.e, self.f = float(args[0]), \ + 0.0, 0.0, float(args[1]), 0.0, 0.0 + return None + if len(args) == 3 and args[2] == 1: + self.a, self.b, self.c, self.d, self.e, self.f = 1.0, \ + float(args[1]), float(args[0]), 1.0, 0.0, 0.0 + return None + raise ValueError("illegal Matrix constructor") + + def invert(self, src=None): + """Calculate the inverted matrix. Return 0 if successful and replace + current one. Else return 1 and do nothing. + """ + if src is None: + dst = TOOLS._invert_matrix(self) + else: + dst = TOOLS._invert_matrix(src) + if dst[0] == 1: + return 1 + self.a, self.b, self.c, self.d, self.e, self.f = dst[1] + return 0 + + def preTranslate(self, tx, ty): + """Calculate pre translation and replace current matrix.""" + tx = float(tx) + ty = float(ty) + self.e += tx * self.a + ty * self.c + self.f += tx * self.b + ty * self.d + return self + + def preScale(self, sx, sy): + """Calculate pre scaling and replace current matrix.""" + sx = float(sx) + sy = float(sy) + self.a *= sx + self.b *= sx + self.c *= sy + self.d *= sy + return self + + def preShear(self, h, v): + """Calculate pre shearing and replace current matrix.""" + h = float(h) + v = float(v) + a, b = self.a, self.b + self.a += v * self.c + self.b += v * self.d + self.c += h * a + self.d += h * b + return self + + def preRotate(self, theta): + """Calculate pre rotation and replace current matrix.""" + theta = float(theta) + while theta < 0: theta += 360 + while theta >= 360: theta -= 360 + if abs(0 - theta) < EPSILON: + pass + + elif abs(90.0 - theta) < EPSILON: + a = self.a + b = self.b + self.a = self.c + self.b = self.d + self.c = -a + self.d = -b + + elif abs(180.0 - theta) < EPSILON: + self.a = -self.a + self.b = -self.b + self.c = -self.c + self.d = -self.d + + elif abs(270.0 - theta) < EPSILON: + a = self.a + b = self.b + self.a = -self.c + self.b = -self.d + self.c = a + self.d = b + + else: + rad = math.radians(theta) + s = math.sin(rad) + c = math.cos(rad) + a = self.a + b = self.b + self.a = c * a + s * self.c + self.b = c * b + s * self.d + self.c =-s * a + c * self.c + self.d =-s * b + c * self.d + + return self + + def concat(self, one, two): + """Multiply two matrices and replace current one.""" + if not len(one) == len(two) == 6: + raise ValueError("bad sequ. length") + self.a, self.b, self.c, self.d, self.e, self.f = TOOLS._concat_matrix(one, two) + return self + + def __getitem__(self, i): + return (self.a, self.b, self.c, self.d, self.e, self.f)[i] + + def __setitem__(self, i, v): + v = float(v) + if i == 0: self.a = v + elif i == 1: self.b = v + elif i == 2: self.c = v + elif i == 3: self.d = v + elif i == 4: self.e = v + elif i == 5: self.f = v + else: + raise IndexError("index out of range") + return + + def __len__(self): + return 6 + + def __repr__(self): + return "Matrix" + str(tuple(self)) + + def __invert__(self): + """Calculate inverted matrix.""" + m1 = Matrix() + m1.invert(self) + return m1 + __inv__ = __invert__ + + def __mul__(self, m): + if hasattr(m, "__float__"): + return Matrix(self.a * m, self.b * m, self.c * m, + self.d * m, self.e * m, self.f * m) + m1 = Matrix(1,1) + return m1.concat(self, m) + + def __truediv__(self, m): + if hasattr(m, "__float__"): + return Matrix(self.a * 1./m, self.b * 1./m, self.c * 1./m, + self.d * 1./m, self.e * 1./m, self.f * 1./m) + m1 = TOOLS._invert_matrix(m)[1] + if not m1: + raise ZeroDivisionError("matrix not invertible") + m2 = Matrix(1,1) + return m2.concat(self, m1) + __div__ = __truediv__ + + def __add__(self, m): + if hasattr(m, "__float__"): + return Matrix(self.a + m, self.b + m, self.c + m, + self.d + m, self.e + m, self.f + m) + if len(m) != 6: + raise ValueError("bad sequ. length") + return Matrix(self.a + m[0], self.b + m[1], self.c + m[2], + self.d + m[3], self.e + m[4], self.f + m[5]) + + def __sub__(self, m): + if hasattr(m, "__float__"): + return Matrix(self.a - m, self.b - m, self.c - m, + self.d - m, self.e - m, self.f - m) + if len(m) != 6: + raise ValueError("bad sequ. length") + return Matrix(self.a - m[0], self.b - m[1], self.c - m[2], + self.d - m[3], self.e - m[4], self.f - m[5]) + + def __pos__(self): + return Matrix(self) + + def __neg__(self): + return Matrix(-self.a, -self.b, -self.c, -self.d, -self.e, -self.f) + + def __bool__(self): + return not (max(self) == min(self) == 0) + + def __nonzero__(self): + return not (max(self) == min(self) == 0) + + def __eq__(self, mat): + if not hasattr(mat, "__len__"): + return False + return len(mat) == 6 and bool(self - mat) is False + + def __abs__(self): + return math.sqrt(sum([c*c for c in self])) + + norm = __abs__ + + @property + def isRectilinear(self): + """True if rectangles are mapped to rectangles.""" + return (abs(self.b) < EPSILON and abs(self.c) < EPSILON) or \ + (abs(self.a) < EPSILON and abs(self.d) < EPSILON); + + +class IdentityMatrix(Matrix): + """Identity matrix [1, 0, 0, 1, 0, 0]""" + def __init__(self): + Matrix.__init__(self, 1.0, 1.0) + def __setattr__(self, name, value): + if name in "ad": + self.__dict__[name] = 1.0 + elif name in "bcef": + self.__dict__[name] = 0.0 + else: + self.__dict__[name] = value + + def checkargs(*args): + raise NotImplementedError("Identity is readonly") + + preRotate = checkargs + preShear = checkargs + preScale = checkargs + preTranslate = checkargs + concat = checkargs + invert = checkargs + + def __repr__(self): + return "IdentityMatrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)" + + def __hash__(self): + return hash((1,0,0,1,0,0)) + + +Identity = IdentityMatrix() + +class Point(object): + """Point() - all zeros\nPoint(x, y)\nPoint(Point) - new copy\nPoint(sequence) - from 'sequence'""" + def __init__(self, *args): + if not args: + self.x = 0.0 + self.y = 0.0 + return None + + if len(args) > 2: + raise ValueError("bad sequ. length") + if len(args) == 2: + self.x = float(args[0]) + self.y = float(args[1]) + return None + if len(args) == 1: + l = args[0] + if hasattr(l, "__getitem__") is False: + raise ValueError("bad Point constructor") + if len(l) != 2: + raise ValueError("bad sequ. length") + self.x = float(l[0]) + self.y = float(l[1]) + return None + raise ValueError("bad Point constructor") + + def transform(self, m): + """Replace point by its transformation with matrix-like m.""" + if len(m) != 6: + raise ValueError("bad sequ. length") + self.x, self.y = TOOLS._transform_point(self, m) + return self + + @property + def unit(self): + """Unit vector of the point.""" + s = self.x * self.x + self.y * self.y + if s < EPSILON: + return Point(0,0) + s = math.sqrt(s) + return Point(self.x / s, self.y / s) + + @property + def abs_unit(self): + """Unit vector with positive coordinates.""" + s = self.x * self.x + self.y * self.y + if s < EPSILON: + return Point(0,0) + s = math.sqrt(s) + return Point(abs(self.x) / s, abs(self.y) / s) + + def distance_to(self, *args): + """Return distance to rectangle or another point.""" + if not len(args) > 0: + raise ValueError("at least one parameter must be given") + + x = args[0] + if len(x) == 2: + x = Point(x) + elif len(x) == 4: + x = Rect(x) + else: + raise ValueError("arg1 must be point-like or rect-like") + + if len(args) > 1: + unit = args[1] + else: + unit = "px" + u = {"px": (1.,1.), "in": (1.,72.), "cm": (2.54, 72.), + "mm": (25.4, 72.)} + f = u[unit][0] / u[unit][1] + + if type(x) is Point: + return abs(self - x) * f + + # from here on, x is a rectangle + # as a safeguard, make a finite copy of it + r = Rect(x.top_left, x.top_left) + r = r | x.bottom_right + if self in r: + return 0.0 + if self.x > r.x1: + if self.y >= r.y1: + return self.distance_to(r.bottom_right, unit) + elif self.y <= r.y0: + return self.distance_to(r.top_right, unit) + else: + return (self.x - r.x1) * f + elif r.x0 <= self.x <= r.x1: + if self.y >= r.y1: + return (self.y - r.y1) * f + else: + return (r.y0 - self.y) * f + else: + if self.y >= r.y1: + return self.distance_to(r.bottom_left, unit) + elif self.y <= r.y0: + return self.distance_to(r.top_left, unit) + else: + return (r.x0 - self.x) * f + + def __getitem__(self, i): + return (self.x, self.y)[i] + + def __len__(self): + return 2 + + def __setitem__(self, i, v): + v = float(v) + if i == 0: self.x = v + elif i == 1: self.y = v + else: + raise IndexError("index out of range") + return None + + def __repr__(self): + return "Point" + str(tuple(self)) + + def __pos__(self): + return Point(self) + + def __neg__(self): + return Point(-self.x, -self.y) + + def __bool__(self): + return not (max(self) == min(self) == 0) + + def __nonzero__(self): + return not (max(self) == min(self) == 0) + + def __eq__(self, p): + if not hasattr(p, "__len__"): + return False + return len(p) == 2 and bool(self - p) is False + + def __abs__(self): + return math.sqrt(self.x * self.x + self.y * self.y) + + norm = __abs__ + + def __add__(self, p): + if hasattr(p, "__float__"): + return Point(self.x + p, self.y + p) + if len(p) != 2: + raise ValueError("bad sequ. length") + return Point(self.x + p[0], self.y + p[1]) + + def __sub__(self, p): + if hasattr(p, "__float__"): + return Point(self.x - p, self.y - p) + if len(p) != 2: + raise ValueError("bad sequ. length") + return Point(self.x - p[0], self.y - p[1]) + + def __mul__(self, m): + if hasattr(m, "__float__"): + return Point(self.x * m, self.y * m) + p = Point(self) + return p.transform(m) + + def __truediv__(self, m): + if hasattr(m, "__float__"): + return Point(self.x * 1./m, self.y * 1./m) + m1 = TOOLS._invert_matrix(m)[1] + if not m1: + raise ZeroDivisionError("matrix not invertible") + p = Point(self) + return p.transform(m1) + + __div__ = __truediv__ + + def __hash__(self): + return hash(tuple(self)) + +class Rect(object): + """Rect() - all zeros\nRect(x0, y0, x1, y1)\nRect(top-left, x1, y1)\nRect(x0, y0, bottom-right)\nRect(top-left, bottom-right)\nRect(Rect or IRect) - new copy\nRect(sequence) - from 'sequence'""" + def __init__(self, *args): + if not args: + self.x0 = self.y0 = self.x1 = self.y1 = 0.0 + return None + + if len(args) > 4: + raise ValueError("bad sequ. length") + if len(args) == 4: + self.x0, self.y0, self.x1, self.y1 = map(float, args) + return None + if len(args) == 1: + l = args[0] + if hasattr(l, "__getitem__") is False: + raise ValueError("bad Rect constructor") + if len(l) != 4: + raise ValueError("bad sequ. length") + self.x0, self.y0, self.x1, self.y1 = map(float, l) + return None + if len(args) == 2: # 2 Points provided + self.x0 = float(args[0][0]) + self.y0 = float(args[0][1]) + self.x1 = float(args[1][0]) + self.y1 = float(args[1][1]) + return None + if len(args) == 3: # 2 floats and 1 Point provided + a0 = args[0] + a1 = args[1] + a2 = args[2] + if hasattr(a0, "__float__"): # (float, float, Point) provided + self.x0 = float(a0) + self.y0 = float(a1) + self.x1 = float(a2[0]) + self.y1 = float(a2[1]) + return None + self.x0 = float(a0[0]) # (Point, float, float) provided + self.y0 = float(a0[1]) + self.x1 = float(a1) + self.y1 = float(a2) + return None + raise ValueError("bad Rect constructor") + + def normalize(self): + """Replace rectangle with its finite version.""" + if self.x1 < self.x0: + self.x0, self.x1 = self.x1, self.x0 + if self.y1 < self.y0: + self.y0, self.y1 = self.y1, self.y0 + return self + + @property + def isEmpty(self): + """True if rectangle area is empty.""" + return self.x0 == self.x1 or self.y0 == self.y1 + + @property + def isInfinite(self): + """True if rectangle is infinite.""" + return self.x0 > self.x1 or self.y0 > self.y1 + + @property + def top_left(self): + """Top-left corner.""" + return Point(self.x0, self.y0) + + @property + def top_right(self): + """Top-right corner.""" + return Point(self.x1, self.y0) + + @property + def bottom_left(self): + """Bottom-left corner.""" + return Point(self.x0, self.y1) + + @property + def bottom_right(self): + """Bottom-right corner.""" + return Point(self.x1, self.y1) + + tl = top_left + tr = top_right + bl = bottom_left + br = bottom_right + + @property + def quad(self): + """Return Quad version of rectangle.""" + return Quad(self.tl, self.tr, self.bl, self.br) + + def morph(self, p, m): + """Morph with matrix-like m and point-like p. + + Returns a new quad.""" + return self.quad.morph(p, m) + + def round(self): + """Return the IRect.""" + return IRect(min(self.x0, self.x1), min(self.y0, self.y1), + max(self.x0, self.x1), max(self.y0, self.y1)) + + irect = property(round) + + width = property(lambda self: abs(self.x1 - self.x0)) + height = property(lambda self: abs(self.y1 - self.y0)) + + def includePoint(self, p): + """Extend to include point-like p.""" + if not len(p) == 2: + raise ValueError("bad sequ. length") + self.x0, self.y0, self.x1, self.y1 = TOOLS._include_point_in_rect(self, p) + return self + + def includeRect(self, r): + """Extend to include rect-like r.""" + if not len(r) == 4: + raise ValueError("bad sequ. length") + self.x0, self.y0, self.x1, self.y1 = TOOLS._union_rect(self, r) + return self + + def intersect(self, r): + """Restrict to common rect with rect-like r.""" + if not len(r) == 4: + raise ValueError("bad sequ. length") + self.x0, self.y0, self.x1, self.y1 = TOOLS._intersect_rect(self, r) + return self + + def contains(self, x): + """Check if containing point-like or rect-like x.""" + return self.__contains__(x) + + def transform(self, m): + """Replace with the transformation by matrix-like m.""" + if not len(m) == 6: + raise ValueError("bad sequ. length") + self.x0, self.y0, self.x1, self.y1 = TOOLS._transform_rect(self, m) + return self + + def __getitem__(self, i): + return (self.x0, self.y0, self.x1, self.y1)[i] + + def __len__(self): + return 4 + + def __setitem__(self, i, v): + v = float(v) + if i == 0: self.x0 = v + elif i == 1: self.y0 = v + elif i == 2: self.x1 = v + elif i == 3: self.y1 = v + else: + raise IndexError("index out of range") + return None + + def __repr__(self): + return "Rect" + str(tuple(self)) + + def __pos__(self): + return Rect(self) + + def __neg__(self): + return Rect(-self.x0, -self.y0, -self.x1, -self.y1) + + def __bool__(self): + return not (max(self) == min(self) == 0) + + def __nonzero__(self): + return not (max(self) == min(self) == 0) + + def __eq__(self, rect): + if not hasattr(rect, "__len__"): + return False + return len(rect) == 4 and bool(self - rect) is False + + def __abs__(self): + if self.isEmpty or self.isInfinite: + return 0.0 + return (self.x1 - self.x0) * (self.y1 - self.y0) + + def norm(self): + return math.sqrt(sum([c*c for c in self])) + + def __add__(self, p): + if hasattr(p, "__float__"): + r = Rect(self.x0 + p, self.y0 + p, self.x1 + p, self.y1 + p) + else: + if len(p) != 4: + raise ValueError("bad sequ. length") + r = Rect(self.x0 + p[0], self.y0 + p[1], self.x1 + p[2], self.y1 + p[3]) + return r + + def __sub__(self, p): + if hasattr(p, "__float__"): + return Rect(self.x0 - p, self.y0 - p, self.x1 - p, self.y1 - p) + if len(p) != 4: + raise ValueError("bad sequ. length") + return Rect(self.x0 - p[0], self.y0 - p[1], self.x1 - p[2], self.y1 - p[3]) + + def __mul__(self, m): + if hasattr(m, "__float__"): + return Rect(self.x0 * m, self.y0 * m, self.x1 * m, self.y1 * m) + r = Rect(self) + r = r.transform(m) + return r + + def __truediv__(self, m): + if hasattr(m, "__float__"): + return Rect(self.x0 * 1./m, self.y0 * 1./m, self.x1 * 1./m, self.y1 * 1./m) + im = TOOLS._invert_matrix(m)[1] + if not im: + raise ZeroDivisionError("matrix not invertible") + r = Rect(self) + r = r.transform(im) + return r + + __div__ = __truediv__ + + def __contains__(self, x): + if hasattr(x, "__float__"): + return x in tuple(self) + l = len(x) + r = Rect(self).normalize() + if l == 4: + if r.isEmpty: return False + xr = Rect(x).normalize() + if xr.isEmpty: return True + if r.x0 <= xr.x0 and r.y0 <= xr.y0 and \ + r.x1 >= xr.x1 and r.y1 >= xr.y1: + return True + return False + if l == 2: + if r.x0 <= x[0] <= r.x1 and \ + r.y0 <= x[1] <= r.y1: + return True + return False + return False + + def __or__(self, x): + if not hasattr(x, "__len__"): + raise ValueError("bad operand 2") + + r = Rect(self) + if len(x) == 2: + return r.includePoint(x) + if len(x) == 4: + return r.includeRect(x) + raise ValueError("bad operand 2") + + def __and__(self, x): + if not hasattr(x, "__len__"): + raise ValueError("bad operand 2") + + r1 = Rect(x) + r = Rect(self) + return r.intersect(r1) + + def intersects(self, x): + """Check if intersection with rectangle x is not empty.""" + r1 = Rect(x) + if self.isEmpty or self.isInfinite or r1.isEmpty or r1.isInfinite: + return False + r = Rect(self) + if r.intersect(r1).isEmpty: + return False + return True + + def __hash__(self): + return hash(tuple(self)) + +class IRect(Rect): + """IRect() - all zeros\nIRect(x0, y0, x1, y1)\nIRect(Rect or IRect) - new copy\nIRect(sequence) - from 'sequence'""" + def __init__(self, *args): + Rect.__init__(self, *args) + self.x0 = math.floor(self.x0 + 0.001) + self.y0 = math.floor(self.y0 + 0.001) + self.x1 = math.ceil(self.x1 - 0.001) + self.y1 = math.ceil(self.y1 - 0.001) + return None + + @property + def round(self): + pass + + irect = round + + @property + def rect(self): + return Rect(self) + + def __repr__(self): + return "IRect" + str(tuple(self)) + + def includePoint(self, p): + """Extend rectangle to include point p.""" + return Rect.includePoint(self, p).round() + + def includeRect(self, r): + """Extend rectangle to include rectangle r.""" + return Rect.includeRect(self, r).round() + + def intersect(self, r): + """Restrict rectangle to intersection with rectangle r.""" + return Rect.intersect(self, r).round() + + def __setitem__(self, i, v): + v = int(v) + if i == 0: self.x0 = v + elif i == 1: self.y0 = v + elif i == 2: self.x1 = v + elif i == 3: self.y1 = v + else: + raise IndexError("index out of range") + return None + + def __pos__(self): + return IRect(self) + + def __neg__(self): + return IRect(-self.x0, -self.y0, -self.x1, -self.y1) + + def __add__(self, p): + return Rect.__add__(self, p).round() + + def __sub__(self, p): + return Rect.__sub__(self, p).round() + + def transform(self, m): + return Rect.transform(self, m).round() + + def __mul__(self, m): + return Rect.__mul__(self, m).round() + + def __truediv__(self, m): + return Rect.__truediv__(self, m).round() + + def __or__(self, x): + return Rect.__or__(self, x).round() + + def __and__(self, x): + return Rect.__and__(self, x).round() + +class Quad(object): + """Quad() - all zero points\nQuad(ul, ur, ll, lr)\nQuad(quad) - new copy\nQuad(sequence) - from 'sequence'""" + def __init__(self, *args): + if not args: + self.ul = self.ur = self.ll = self.lr = Point() + return None + + if len(args) > 4: + raise ValueError("bad sequ. length") + if len(args) == 4: + self.ul, self.ur, self.ll, self.lr = map(Point, args) + return None + if len(args) == 1: + l = args[0] + if hasattr(l, "__getitem__") is False: + raise ValueError("bad Quad constructor") + if len(l) != 4: + raise ValueError("bad sequ. length") + self.ul, self.ur, self.ll, self.lr = map(Point, l) + return None + raise ValueError("bad Quad constructor") + + @property + def isRectangular(self): + """Check if quad is rectangular. + + Notes: + Some rotation matrix can thus transform it into a rectangle. + This is equivalent to three corners enclose 90 degrees. + Returns: + True or False. + """ + + sine = TOOLS._sine_between(self.ul, self.ur, self.lr) + if abs(sine - 1) > EPSILON: # the sine of the angle + return False + + sine = TOOLS._sine_between(self.ur, self.lr, self.ll) + if abs(sine - 1) > EPSILON: + return False + + sine = TOOLS._sine_between(self.lr, self.ll, self.ul) + if abs(sine - 1) > EPSILON: + return False + + return True + + + @property + def isConvex(self): + """Check if quad is convex and not degenerate. + + Notes: + For convexity, every line connecting two points of the quad must be + inside the quad. This is equivalent to that every corner encloses + an angle with 0 < angle < 180 degrees. + Excluding the "degenerate" case (all points on the same line), + it suffices to check that the sines of three angles are > 0. + Returns: + True or False. + """ + count = 0 + sine = TOOLS._sine_between(self.ul, self.ur, self.lr) + if sine > 0: + count += 1 + elif sine < 0: + return False + + sine = TOOLS._sine_between(self.ur, self.lr, self.ll) + if sine > 0: + count += 1 + elif sine < 0: + return False + + sine = TOOLS._sine_between(self.lr, self.ll, self.ul) + if sine > 0: + count += 1 + elif sine < 0: + return False + + sine = TOOLS._sine_between(self.ll, self.ul, self.ur) + if sine > 0: + count += 1 + elif sine < 0: + return False + + if count >= 2: + return True + + return False + + + @property + def isEmpty(self): + """Check whether all quad corners are on the same line. + + The is the case exactly if more than one corner angle is zero. + """ + count = 0 + if abs(TOOLS._sine_between(self.ul, self.ur, self.lr)) < EPSILON: + count += 1 + if abs(TOOLS._sine_between(self.ur, self.lr, self.ll)) < EPSILON: + count += 1 + if abs(TOOLS._sine_between(self.lr, self.ll, self.ul)) < EPSILON: + count += 1 + if abs(TOOLS._sine_between(self.ll, self.ul, self.ur)) < EPSILON: + count += 1 + if count <= 2: + return False + return True + + width = property(lambda self: max(abs(self.ul - self.ur), abs(self.ll - self.lr))) + height = property(lambda self: max(abs(self.ul - self.ll), abs(self.ur - self.lr))) + + @property + def rect(self): + r = Rect() + r.x0 = min(self.ul.x, self.ur.x, self.lr.x, self.ll.x) + r.y0 = min(self.ul.y, self.ur.y, self.lr.y, self.ll.y) + r.x1 = max(self.ul.x, self.ur.x, self.lr.x, self.ll.x) + r.y1 = max(self.ul.y, self.ur.y, self.lr.y, self.ll.y) + return r + + def __getitem__(self, i): + return (self.ul, self.ur, self.ll, self.lr)[i] + + def __len__(self): + return 4 + + def __setitem__(self, i, v): + if i == 0: self.ul = Point(v) + elif i == 1: self.ur = Point(v) + elif i == 2: self.ll = Point(v) + elif i == 3: self.lr = Point(v) + else: + raise IndexError("index out of range") + return None + + def __repr__(self): + return "Quad" + str(tuple(self)) + + def __pos__(self): + return Quad(self) + + def __neg__(self): + return Quad(-self.ul, -self.ur, -self.ll, -self.lr) + + def __bool__(self): + return not self.isEmpty + + def __nonzero__(self): + return not self.isEmpty + + def __eq__(self, quad): + if not hasattr(quad, "__len__"): + return False + return len(quad) == 4 and ( + self.ul == quad[0] and + self.ur == quad[1] and + self.ll == quad[2] and + self.lr == quad[3] + ) + + def __abs__(self): + if self.isEmpty: + return 0.0 + return abs(self.ul - self.ur) * abs(self.ul - self.ll) + + + def morph(self, p, m): + """Morph the quad with matrix-like 'm' and point-like 'p'. + + Return a new quad.""" + + delta = Matrix(1, 1).preTranslate(p.x, p.y) + q = self * ~delta * m * delta + return q + + + def transform(self, m): + """Replace quad by its transformation with matrix m.""" + if len(m) != 6: + raise ValueError("bad sequ. length") + self.ul *= m + self.ur *= m + self.ll *= m + self.lr *= m + return self + + def __mul__(self, m): + r = Quad(self) + r = r.transform(m) + return r + + def __truediv__(self, m): + if hasattr(m, "__float__"): + im = 1. / m + else: + im = TOOLS._invert_matrix(m)[1] + if not im: + raise ZeroDivisionError("matrix not invertible") + r = Quad(self) + r = r.transform(im) + return r + + __div__ = __truediv__ + + def __hash__(self): + return hash(tuple(self)) + +%} diff --git a/fitz/helper-other.i b/fitz/helper-other.i new file mode 100644 index 0000000..e04bb85 --- /dev/null +++ b/fitz/helper-other.i @@ -0,0 +1,868 @@ +%{ + +int LIST_APPEND_DROP(PyObject *list, PyObject *item) +{ + if (!list || !PyList_Check(list) || !item) return -2; + int rc = PyList_Append(list, item); + Py_DECREF(item); + return rc; +} + +int DICT_SETITEM_DROP(PyObject *dict, PyObject *key, PyObject *value) +{ + if (!dict || !PyDict_Check(dict) || !key || !value) return -2; + int rc = PyDict_SetItem(dict, key, value); + Py_DECREF(value); + return rc; +} + +int DICT_SETITEMSTR_DROP(PyObject *dict, const char *key, PyObject *value) +{ + if (!dict || !PyDict_Check(dict) || !key || !value) return -2; + int rc = PyDict_SetItemString(dict, key, value); + Py_DECREF(value); + return rc; +} + + +PyObject *JM_EscapeStrFromBuffer(fz_context *ctx, fz_buffer *buff) +{ + if (!buff) return PyUnicode_FromString(""); + unsigned char *s = NULL; + size_t len = fz_buffer_storage(ctx, buff, &s); + PyObject *val = PyUnicode_DecodeRawUnicodeEscape((const char *) s, (Py_ssize_t) len, "replace"); + if (!val) { + val = PyUnicode_FromString(""); + PyErr_Clear(); + } + return val; +} + +PyObject *JM_UnicodeFromStr(const char *c) +{ + if (!c) return PyUnicode_FromString(""); + PyObject *val = Py_BuildValue("s", c); + if (!val) { + val = PyUnicode_FromString(""); + PyErr_Clear(); + } + return val; +} + +PyObject *JM_EscapeStrFromStr(const char *c) +{ + if (!c) return PyUnicode_FromString(""); + PyObject *val = PyUnicode_DecodeRawUnicodeEscape(c, (Py_ssize_t) strlen(c), "replace"); + if (!val) { + val = PyUnicode_FromString(""); + PyErr_Clear(); + } + return val; +} + +// redirect MuPDF warnings +void JM_mupdf_warning(void *user, const char *message) +{ + LIST_APPEND_DROP(JM_mupdf_warnings_store, JM_EscapeStrFromStr(message)); +} + +// redirect MuPDF errors +void JM_mupdf_error(void *user, const char *message) +{ + LIST_APPEND_DROP(JM_mupdf_warnings_store, JM_EscapeStrFromStr(message)); + if (JM_mupdf_show_errors == Py_True) + PySys_WriteStderr("mupdf: %s\n", message); +} + +// a simple tracer +void JM_TRACE(const char *id) +{ + PySys_WriteStdout("%s\n", id); +} + + +// put a warning on Python-stdout +void JM_Warning(const char *id) +{ + PySys_WriteStdout("warning: %s\n", id); +} + +#if JM_MEMORY == 1 +//----------------------------------------------------------------------------- +// The following 3 functions replace MuPDF standard memory allocation. +// This will ensure, that MuPDF memory handling becomes part of Python's +// memory management. +//----------------------------------------------------------------------------- +static void *JM_Py_Malloc(void *opaque, size_t size) +{ + return PyMem_Malloc(size); +} + +static void *JM_Py_Realloc(void *opaque, void *old, size_t size) +{ + return PyMem_Realloc(old, size); +} + +static void JM_PY_Free(void *opaque, void *ptr) +{ + PyMem_Free(ptr); +} + +const fz_alloc_context JM_Alloc_Context = +{ + NULL, + JM_Py_Malloc, + JM_Py_Realloc, + JM_PY_Free +}; +#endif + +// return Python bools for a given integer +PyObject *JM_BOOL(int v) +{ + if (v == 0) + Py_RETURN_FALSE; + Py_RETURN_TRUE; +} + +PyObject *JM_fitz_config() +{ +#if defined(TOFU) +#define have_TOFU JM_BOOL(0) +#else +#define have_TOFU JM_BOOL(1) +#endif +#if defined(TOFU_CJK) +#define have_TOFU_CJK JM_BOOL(0) +#else +#define have_TOFU_CJK JM_BOOL(1) +#endif +#if defined(TOFU_CJK_EXT) +#define have_TOFU_CJK_EXT JM_BOOL(0) +#else +#define have_TOFU_CJK_EXT JM_BOOL(1) +#endif +#if defined(TOFU_CJK_LANG) +#define have_TOFU_CJK_LANG JM_BOOL(0) +#else +#define have_TOFU_CJK_LANG JM_BOOL(1) +#endif +#if defined(TOFU_EMOJI) +#define have_TOFU_EMOJI JM_BOOL(0) +#else +#define have_TOFU_EMOJI JM_BOOL(1) +#endif +#if defined(TOFU_HISTORIC) +#define have_TOFU_HISTORIC JM_BOOL(0) +#else +#define have_TOFU_HISTORIC JM_BOOL(1) +#endif +#if defined(TOFU_SYMBOL) +#define have_TOFU_SYMBOL JM_BOOL(0) +#else +#define have_TOFU_SYMBOL JM_BOOL(1) +#endif +#if defined(TOFU_SIL) +#define have_TOFU_SIL JM_BOOL(0) +#else +#define have_TOFU_SIL JM_BOOL(1) +#endif +#if defined(TOFU_BASE14) +#define have_TOFU_BASE14 JM_BOOL(0) +#else +#define have_TOFU_BASE14 JM_BOOL(1) +#endif + PyObject *dict = PyDict_New(); + DICT_SETITEMSTR_DROP(dict, "plotter-g", JM_BOOL(FZ_PLOTTERS_G)); + DICT_SETITEMSTR_DROP(dict, "plotter-rgb", JM_BOOL(FZ_PLOTTERS_RGB)); + DICT_SETITEMSTR_DROP(dict, "plotter-cmyk", JM_BOOL(FZ_PLOTTERS_CMYK)); + DICT_SETITEMSTR_DROP(dict, "plotter-n", JM_BOOL(FZ_PLOTTERS_N)); + DICT_SETITEMSTR_DROP(dict, "pdf", JM_BOOL(FZ_ENABLE_PDF)); + DICT_SETITEMSTR_DROP(dict, "xps", JM_BOOL(FZ_ENABLE_XPS)); + DICT_SETITEMSTR_DROP(dict, "svg", JM_BOOL(FZ_ENABLE_SVG)); + DICT_SETITEMSTR_DROP(dict, "cbz", JM_BOOL(FZ_ENABLE_CBZ)); + DICT_SETITEMSTR_DROP(dict, "img", JM_BOOL(FZ_ENABLE_IMG)); + DICT_SETITEMSTR_DROP(dict, "html", JM_BOOL(FZ_ENABLE_HTML)); + DICT_SETITEMSTR_DROP(dict, "epub", JM_BOOL(FZ_ENABLE_EPUB)); + DICT_SETITEMSTR_DROP(dict, "jpx", JM_BOOL(FZ_ENABLE_JPX)); + DICT_SETITEMSTR_DROP(dict, "js", JM_BOOL(FZ_ENABLE_JS)); + DICT_SETITEMSTR_DROP(dict, "tofu", have_TOFU); + DICT_SETITEMSTR_DROP(dict, "tofu-cjk", have_TOFU_CJK); + DICT_SETITEMSTR_DROP(dict, "tofu-cjk-ext", have_TOFU_CJK_EXT); + DICT_SETITEMSTR_DROP(dict, "tofu-cjk-lang", have_TOFU_CJK_LANG); + DICT_SETITEMSTR_DROP(dict, "tofu-emoji", have_TOFU_EMOJI); + DICT_SETITEMSTR_DROP(dict, "tofu-historic", have_TOFU_HISTORIC); + DICT_SETITEMSTR_DROP(dict, "tofu-symbol", have_TOFU_SYMBOL); + DICT_SETITEMSTR_DROP(dict, "tofu-sil", have_TOFU_SIL); + DICT_SETITEMSTR_DROP(dict, "icc", JM_BOOL(FZ_ENABLE_ICC)); + DICT_SETITEMSTR_DROP(dict, "base14", have_TOFU_BASE14); + DICT_SETITEMSTR_DROP(dict, "py-memory", JM_BOOL(JM_MEMORY)); + return dict; +} + +//---------------------------------------------------------------------------- +// Update a color float array with values from a Python sequence. +// Any error condition is treated as a no-op. +//---------------------------------------------------------------------------- +void JM_color_FromSequence(PyObject *color, int *n, float col[4]) +{ + if (!color || (!PySequence_Check(color) && !PyFloat_Check(color))) { + *n = 1; + return; + } + if (PyFloat_Check(color)) { // maybe just a single float + float c = (float) PyFloat_AsDouble(color); + if (!INRANGE(c, 0, 1)) { + *n = 1; + return; + } + col[0] = c; + *n = 1; + return; + } + + int len = (int) PySequence_Size(color), rc; + if (!INRANGE(len, 1, 4) || len == 2) { + *n = 1; + return; + } + + float mcol[4] = {0,0,0,0}; // local color storage + Py_ssize_t i; + for (i = 0; i < len; i++) { + rc = JM_FLOAT_ITEM(color, i, &mcol[i]); + if (!INRANGE(mcol[i], 0, 1) || rc == 1) mcol[i] = 1; + } + + *n = len; + for (i = 0; i < len; i++) + col[i] = mcol[i]; + return; +} + +// return extension for fitz image type +const char *JM_image_extension(int type) +{ + switch (type) { + case(FZ_IMAGE_RAW): return "raw"; + case(FZ_IMAGE_FLATE): return "flate"; + case(FZ_IMAGE_LZW): return "lzw"; + case(FZ_IMAGE_RLD): return "rld"; + case(FZ_IMAGE_BMP): return "bmp"; + case(FZ_IMAGE_GIF): return "gif"; + case(FZ_IMAGE_JBIG2): return "jbig2"; + case(FZ_IMAGE_JPEG): return "jpeg"; + case(FZ_IMAGE_JPX): return "jpx"; + case(FZ_IMAGE_JXR): return "jxr"; + case(FZ_IMAGE_PNG): return "png"; + case(FZ_IMAGE_PNM): return "pnm"; + case(FZ_IMAGE_TIFF): return "tiff"; + default: return "n/a"; + } +} + +//---------------------------------------------------------------------------- +// Turn fz_buffer into a Python bytes object +//---------------------------------------------------------------------------- +PyObject *JM_BinFromBuffer(fz_context *ctx, fz_buffer *buffer) +{ + +#if PY_VERSION_HEX < 0x03000000 + #define PyBytes_FromString(x) PyString_FromString(x) + #define PyBytes_FromStringAndSize(c, l) PyString_FromStringAndSize(c, l) +#endif + + if (!buffer) { + return PyBytes_FromString(""); + } + unsigned char *c = NULL; + size_t len = fz_buffer_storage(ctx, buffer, &c); + return PyBytes_FromStringAndSize((const char *) c, (Py_ssize_t) len); +} + +//---------------------------------------------------------------------------- +// Turn fz_buffer into a Python bytearray object +//---------------------------------------------------------------------------- +PyObject *JM_BArrayFromBuffer(fz_context *ctx, fz_buffer *buffer) +{ + if (!buffer) { + return PyByteArray_FromStringAndSize("", 0); + } + unsigned char *c = NULL; + size_t len = fz_buffer_storage(ctx, buffer, &c); + return PyByteArray_FromStringAndSize((const char *) c, (Py_ssize_t) len); +} + + +//---------------------------------------------------------------------------- +// compress char* into a new buffer +//---------------------------------------------------------------------------- +fz_buffer *JM_compress_buffer(fz_context *ctx, fz_buffer *inbuffer) +{ + fz_buffer *buf = NULL; + fz_try(ctx) { + size_t compressed_length = 0; + unsigned char *data = fz_new_deflated_data_from_buffer(ctx, + &compressed_length, inbuffer, FZ_DEFLATE_BEST); + if (data == NULL || compressed_length == 0) + return NULL; + buf = fz_new_buffer_from_data(ctx, data, compressed_length); + fz_resize_buffer(ctx, buf, compressed_length); + } + fz_catch(ctx) { + fz_drop_buffer(ctx, buf); + fz_rethrow(ctx); + } + return buf; +} + +//---------------------------------------------------------------------------- +// update a stream object +// compress stream when beneficial +//---------------------------------------------------------------------------- +void JM_update_stream(fz_context *ctx, pdf_document *doc, pdf_obj *obj, fz_buffer *buffer, int compress) +{ + + fz_buffer *nres = NULL; + size_t len = fz_buffer_storage(ctx, buffer, NULL); + size_t nlen = len; + + if (len > 30) { // ignore small stuff + nres = JM_compress_buffer(ctx, buffer); + nlen = fz_buffer_storage(ctx, nres, NULL); + } + + if (nlen < len && nres && compress==1) { // was it worth the effort? + pdf_dict_put(ctx, obj, PDF_NAME(Filter), PDF_NAME(FlateDecode)); + pdf_update_stream(ctx, doc, obj, nres, 1); + } else { + pdf_update_stream(ctx, doc, obj, buffer, 0); + } + fz_drop_buffer(ctx, nres); +} + +//----------------------------------------------------------------------------- +// return hex characters for n characters in input 'in' +//----------------------------------------------------------------------------- +void hexlify(int n, unsigned char *in, unsigned char *out) +{ + const unsigned char hdigit[17] = "0123456789abcedf"; + int i, i1, i2; + for (i = 0; i < n; i++) { + i1 = in[i]>>4; + i2 = in[i] - i1*16; + out[2*i] = hdigit[i1]; + out[2*i + 1] = hdigit[i2]; + } + out[2*n] = 0; +} + +//---------------------------------------------------------------------------- +// Make fz_buffer from a PyBytes, PyByteArray, io.BytesIO object +//---------------------------------------------------------------------------- +fz_buffer *JM_BufferFromBytes(fz_context *ctx, PyObject *stream) +{ + if (!EXISTS(stream)) return NULL; + char *c = NULL; + PyObject *mybytes = NULL; + size_t len = 0; + fz_buffer *res = NULL; + fz_var(res); + fz_try(ctx) { + if (PyBytes_Check(stream)) { + c = PyBytes_AS_STRING(stream); + len = (size_t) PyBytes_GET_SIZE(stream); + } else if (PyByteArray_Check(stream)) { + c = PyByteArray_AS_STRING(stream); + len = (size_t) PyByteArray_GET_SIZE(stream); + } else if (PyObject_HasAttrString(stream, "getvalue")) { + // we assume here that this delivers what we expect + mybytes = PyObject_CallMethod(stream, "getvalue", NULL); + c = PyBytes_AS_STRING(mybytes); + len = (size_t) PyBytes_GET_SIZE(mybytes); + } + // all the above leave c as NULL pointer if unsuccessful + if (c) res = fz_new_buffer_from_copied_data(ctx, (const unsigned char *) c, len); + } + fz_always(ctx) { + Py_CLEAR(mybytes); + PyErr_Clear(); + } + fz_catch(ctx) { + fz_drop_buffer(ctx, res); + fz_rethrow(ctx); + } + return res; +} + +//---------------------------------------------------------------------------- +// Modified copy of SWIG_Python_str_AsChar +// If Py3, the SWIG original v3.0.12 does *not* deliver NULL for a +// non-string input, as does PyString_AsString in Py2. +//---------------------------------------------------------------------------- +char *JM_Python_str_AsChar(PyObject *str) +{ + if (!str) return NULL; +#if PY_VERSION_HEX >= 0x03000000 + char *newstr = NULL; + PyObject *xstr = PyUnicode_AsUTF8String(str); + if (xstr) { + char *cstr; + Py_ssize_t len; + PyBytes_AsStringAndSize(xstr, &cstr, &len); + size_t l = len + 1; + newstr = JM_Alloc(char, l); + memcpy(newstr, cstr, l); + Py_XDECREF(xstr); + } + return newstr; +#else + return PyString_AsString(str); +#endif +} + +#if PY_VERSION_HEX >= 0x03000000 +# define JM_Python_str_DelForPy3(x) JM_Free(x) +#else +# define JM_Python_str_DelForPy3(x) +#endif + +//---------------------------------------------------------------------------- +// Deep-copies a specified source page to the target location. +// Modified copy of function of pdfmerge.c: we also copy annotations, but +// we skip **link** annotations. In addition we rotate output. +//---------------------------------------------------------------------------- +static void +page_merge(fz_context *ctx, pdf_document *doc_des, pdf_document *doc_src, int page_from, int page_to, int rotate, int links, int copy_annots, pdf_graft_map *graft_map) +{ + pdf_obj *page_ref = NULL; + pdf_obj *page_dict = NULL; + pdf_obj *obj = NULL, *ref = NULL; + + // list of object types (per page) we want to copy + pdf_obj *known_page_objs[] = { + PDF_NAME(Contents), + PDF_NAME(Resources), + PDF_NAME(MediaBox), + PDF_NAME(CropBox), + PDF_NAME(BleedBox), + PDF_NAME(TrimBox), + PDF_NAME(ArtBox), + PDF_NAME(Rotate), + PDF_NAME(UserUnit) + }; + int i, n = nelem(known_page_objs); // number of list elements + fz_var(obj); + fz_var(ref); + fz_var(page_dict); + fz_try(ctx) { + page_ref = pdf_lookup_page_obj(ctx, doc_src, page_from); + pdf_flatten_inheritable_page_items(ctx, page_ref); + + // make a new page + page_dict = pdf_new_dict(ctx, doc_des, 4); + pdf_dict_put(ctx, page_dict, PDF_NAME(Type), PDF_NAME(Page)); + + // copy objects of source page into it + for (i = 0; i < n; i++) { + obj = pdf_dict_get(ctx, page_ref, known_page_objs[i]); + if (obj != NULL) + pdf_dict_put_drop(ctx, page_dict, known_page_objs[i], pdf_graft_mapped_object(ctx, graft_map, obj)); + } + + // Copy the annotations, but skip types Link and Popup. + // Also skip IRT annotations ("in response to"). + // Remove dict keys P (parent) and Popup from copyied annot. + if (copy_annots) { + pdf_obj *old_annots = pdf_dict_get(ctx, page_ref, PDF_NAME(Annots)); + if (old_annots) { + n = pdf_array_len(ctx, old_annots); + pdf_obj *new_annots = pdf_new_array(ctx, doc_des, n); + for (i = 0; i < n; i++) { + pdf_obj *o = pdf_array_get(ctx, old_annots, i); + pdf_obj *subtype = pdf_dict_get(ctx, o, PDF_NAME(Subtype)); + if (pdf_name_eq(ctx, subtype, PDF_NAME(Link))) continue; + if (pdf_name_eq(ctx, subtype, PDF_NAME(Popup))) continue; + if (pdf_dict_gets(ctx, o, "IRT")) continue; + pdf_obj *copy_o = pdf_graft_mapped_object(ctx, graft_map, o); + pdf_dict_del(gctx, copy_o, PDF_NAME(Popup)); + pdf_dict_del(gctx, copy_o, PDF_NAME(P)); + pdf_array_push_drop(ctx, new_annots, copy_o); + } + pdf_dict_put_drop(ctx, page_dict, PDF_NAME(Annots), new_annots); + } + } + // rotate the page as requested + if (rotate != -1) { + pdf_dict_put_int(ctx, page_dict, PDF_NAME(Rotate), (int64_t) rotate); + } + // Now add the page dictionary to dest PDF + obj = pdf_add_object(ctx, doc_des, page_dict); + + // Get indirect ref of the new page + int num = pdf_to_num(ctx, obj); + ref = pdf_new_indirect(ctx, doc_des, num, 0); + + // Insert new page at specified location + pdf_insert_page(ctx, doc_des, page_to, ref); + + } + fz_always(ctx) { + pdf_drop_obj(ctx, obj); + pdf_drop_obj(ctx, ref); + } + fz_catch(ctx) { + fz_rethrow(ctx); + } +} + +//----------------------------------------------------------------------------- +// Copy a range of pages (spage, epage) from a source PDF to a specified +// location (apage) of the target PDF. +// If spage > epage, the sequence of source pages is reversed. +//----------------------------------------------------------------------------- +void JM_merge_range(fz_context *ctx, pdf_document *doc_des, pdf_document *doc_src, int spage, int epage, int apage, int rotate, int links, int annots) +{ + int page, afterpage; + pdf_graft_map *graft_map; + afterpage = apage; + graft_map = pdf_new_graft_map(ctx, doc_des); + + fz_try(ctx) { + if (spage < epage) { + for (page = spage; page <= epage; page++, afterpage++) + page_merge(ctx, doc_des, doc_src, page, afterpage, rotate, links, annots, graft_map); + } else { + for (page = spage; page >= epage; page--, afterpage++) + page_merge(ctx, doc_des, doc_src, page, afterpage, rotate, links, annots, graft_map); + } + } + + fz_always(ctx) { + pdf_drop_graft_map(ctx, graft_map); + } + fz_catch(ctx) { + fz_rethrow(ctx); + } +} + +//---------------------------------------------------------------------------- +// Return list of outline xref numbers. Recursive function. Arguments: +// 'obj' first OL item +// 'xrefs' empty Python list +//---------------------------------------------------------------------------- +PyObject *JM_outline_xrefs(fz_context *ctx, pdf_obj *obj, PyObject *xrefs) +{ + pdf_obj *first, *parent, *thisobj; + if (!obj) return xrefs; + thisobj = obj; + while (thisobj) { + LIST_APPEND_DROP(xrefs, Py_BuildValue("i", pdf_to_num(ctx, thisobj))); + first = pdf_dict_get(ctx, thisobj, PDF_NAME(First)); // try go down + if (first) xrefs = JM_outline_xrefs(ctx, first, xrefs); + thisobj = pdf_dict_get(ctx, thisobj, PDF_NAME(Next)); // try go next + parent = pdf_dict_get(ctx, thisobj, PDF_NAME(Parent)); // get parent + if (!thisobj) thisobj = parent; // goto parent if no next exists + } + return xrefs; +} + +//----------------------------------------------------------------------------- +// Return the contents of a font file, identified by xref +//----------------------------------------------------------------------------- +fz_buffer *JM_get_fontbuffer(fz_context *ctx, pdf_document *doc, int xref) +{ + if (xref < 1) return NULL; + pdf_obj *o, *obj = NULL, *desft, *stream = NULL; + o = pdf_load_object(ctx, doc, xref); + desft = pdf_dict_get(ctx, o, PDF_NAME(DescendantFonts)); + char *ext = NULL; + if (desft) { + obj = pdf_resolve_indirect(ctx, pdf_array_get(ctx, desft, 0)); + obj = pdf_dict_get(ctx, obj, PDF_NAME(FontDescriptor)); + } else { + obj = pdf_dict_get(ctx, o, PDF_NAME(FontDescriptor)); + } + + if (!obj) { + pdf_drop_obj(ctx, o); + PySys_WriteStdout("invalid font - FontDescriptor missing"); + return NULL; + } + pdf_drop_obj(ctx, o); + o = obj; + + obj = pdf_dict_get(ctx, o, PDF_NAME(FontFile)); + if (obj) stream = obj; // ext = "pfa" + + obj = pdf_dict_get(ctx, o, PDF_NAME(FontFile2)); + if (obj) stream = obj; // ext = "ttf" + + obj = pdf_dict_get(ctx, o, PDF_NAME(FontFile3)); + if (obj) { + stream = obj; + + obj = pdf_dict_get(ctx, obj, PDF_NAME(Subtype)); + if (obj && !pdf_is_name(ctx, obj)) { + PySys_WriteStdout("invalid font descriptor subtype"); + return NULL; + } + + if (pdf_name_eq(ctx, obj, PDF_NAME(Type1C))) + ext = "cff"; + else if (pdf_name_eq(ctx, obj, PDF_NAME(CIDFontType0C))) + ext = "cid"; + else if (pdf_name_eq(ctx, obj, PDF_NAME(OpenType))) + ext = "otf"; + else + PySys_WriteStdout("warning: unhandled font type '%s'", pdf_to_name(ctx, obj)); + } + + if (!stream) { + PySys_WriteStdout("warning: unhandled font type"); + return NULL; + } + + return pdf_load_stream(ctx, stream); +} + +//----------------------------------------------------------------------------- +// Return the file extension of a font file, identified by xref +//----------------------------------------------------------------------------- +char *JM_get_fontextension(fz_context *ctx, pdf_document *doc, int xref) +{ + if (xref < 1) return "n/a"; + pdf_obj *o, *obj = NULL, *desft; + o = pdf_load_object(ctx, doc, xref); + desft = pdf_dict_get(ctx, o, PDF_NAME(DescendantFonts)); + if (desft) { + obj = pdf_resolve_indirect(ctx, pdf_array_get(ctx, desft, 0)); + obj = pdf_dict_get(ctx, obj, PDF_NAME(FontDescriptor)); + } else { + obj = pdf_dict_get(ctx, o, PDF_NAME(FontDescriptor)); + } + + pdf_drop_obj(ctx, o); + if (!obj) return "n/a"; // this is a base-14 font + + o = obj; // we have the FontDescriptor + + obj = pdf_dict_get(ctx, o, PDF_NAME(FontFile)); + if (obj) return "pfa"; + + obj = pdf_dict_get(ctx, o, PDF_NAME(FontFile2)); + if (obj) return "ttf"; + + obj = pdf_dict_get(ctx, o, PDF_NAME(FontFile3)); + if (obj) { + obj = pdf_dict_get(ctx, obj, PDF_NAME(Subtype)); + if (obj && !pdf_is_name(ctx, obj)) { + PySys_WriteStdout("invalid font descriptor subtype"); + return "n/a"; + } + if (pdf_name_eq(ctx, obj, PDF_NAME(Type1C))) + return "cff"; + else if (pdf_name_eq(ctx, obj, PDF_NAME(CIDFontType0C))) + return "cid"; + else if (pdf_name_eq(ctx, obj, PDF_NAME(OpenType))) + return "otf"; + else + PySys_WriteStdout("unhandled font type '%s'", pdf_to_name(ctx, obj)); + } + + return "n/a"; +} + + +//----------------------------------------------------------------------------- +// create PDF object from given string (new in v1.14.0: MuPDF dropped it) +//----------------------------------------------------------------------------- +pdf_obj *JM_pdf_obj_from_str(fz_context *ctx, pdf_document *doc, char *src) +{ + pdf_obj *result = NULL; + pdf_lexbuf lexbuf; + fz_stream *stream = fz_open_memory(ctx, (unsigned char *)src, strlen(src)); + + pdf_lexbuf_init(ctx, &lexbuf, PDF_LEXBUF_SMALL); + + fz_try(ctx) { + result = pdf_parse_stm_obj(ctx, doc, stream, &lexbuf); + } + + fz_always(ctx) { + pdf_lexbuf_fin(ctx, &lexbuf); + fz_drop_stream(ctx, stream); + } + + fz_catch(ctx) { + fz_rethrow(ctx); + } + + return result; + +} + +//---------------------------------------------------------------------------- +// return normalized /Rotate value +//---------------------------------------------------------------------------- +int JM_norm_rotation(int rotate) +{ + while (rotate < 0) rotate += 360; + while (rotate >= 360) rotate -= 360; + if (rotate % 90 != 0) return 0; + return rotate; +} + + +//---------------------------------------------------------------------------- +// return a PDF page's /Rotate value: one of (0, 90, 180, 270) +//---------------------------------------------------------------------------- +int JM_page_rotation(fz_context *ctx, pdf_page *page) +{ + int rotate = 0; + fz_try(ctx) + { + rotate = pdf_to_int(ctx, + pdf_dict_get_inheritable(ctx, page->obj, PDF_NAME(Rotate))); + rotate = JM_norm_rotation(rotate); + } + fz_catch(ctx) return 0; + return rotate; +} + + +//---------------------------------------------------------------------------- +// return a PDF page's MediaBox +//---------------------------------------------------------------------------- +fz_rect JM_mediabox(fz_context *ctx, pdf_page *page) +{ + fz_rect mediabox, page_mediabox; + + mediabox = pdf_to_rect(ctx, pdf_dict_get_inheritable(ctx, page->obj, + PDF_NAME(MediaBox))); + if (fz_is_empty_rect(mediabox) || fz_is_infinite_rect(mediabox)) + { + mediabox.x0 = 0; + mediabox.y0 = 0; + mediabox.x1 = 612; + mediabox.y1 = 792; + } + + page_mediabox.x0 = fz_min(mediabox.x0, mediabox.x1); + page_mediabox.y0 = fz_min(mediabox.y0, mediabox.y1); + page_mediabox.x1 = fz_max(mediabox.x0, mediabox.x1); + page_mediabox.y1 = fz_max(mediabox.y0, mediabox.y1); + + if (page_mediabox.x1 - page_mediabox.x0 < 1 || + page_mediabox.y1 - page_mediabox.y0 < 1) + page_mediabox = fz_unit_rect; + + return page_mediabox; +} + + +//---------------------------------------------------------------------------- +// return a PDF page's CropBox +//---------------------------------------------------------------------------- +fz_rect JM_cropbox(fz_context *ctx, pdf_page *page) +{ + fz_rect mediabox = JM_mediabox(ctx, page); + fz_rect cropbox = pdf_to_rect(ctx, + pdf_dict_get_inheritable(ctx, page->obj, PDF_NAME(CropBox))); + if (fz_is_infinite_rect(cropbox) || fz_is_empty_rect(cropbox)) + return mediabox; + float y0 = mediabox.y1 - cropbox.y1; + float y1 = mediabox.y1 - cropbox.y0; + cropbox.y0 = y0; + cropbox.y1 = y1; + return cropbox; +} + + +//---------------------------------------------------------------------------- +// calculate width and height of the UNROTATED page +//---------------------------------------------------------------------------- +fz_point JM_cropbox_size(fz_context *ctx, pdf_page *page) +{ + fz_point size; + fz_try(ctx) + { + fz_rect rect = JM_cropbox(ctx, page); + float w = (rect.x0 < rect.x1 ? rect.x1 - rect.x0 : rect.x0 - rect.x1); + float h = (rect.y0 < rect.y1 ? rect.y1 - rect.y0 : rect.y0 - rect.y1); + size = fz_make_point(w, h); + } + fz_catch(ctx) fz_rethrow(ctx); + return size; +} + + +//---------------------------------------------------------------------------- +// calculate page rotation matrices +//---------------------------------------------------------------------------- +fz_matrix JM_rotate_page_matrix(fz_context *ctx, pdf_page *page) +{ + if (!page) return fz_identity; // no valid pdf page given + int rotation = JM_page_rotation(ctx, page); + if (rotation == 0) return fz_identity; // no rotation + fz_matrix m; + fz_point cb_size = JM_cropbox_size(ctx, page); + float w = cb_size.x; + float h = cb_size.y; + if (rotation == 90) + m = fz_make_matrix(0, 1, -1, 0, h, 0); + else if (rotation == 180) + m = fz_make_matrix(-1, 0, 0, -1, w, h); + else + m = fz_make_matrix(0, -1, 1, 0, 0, w); + return m; +} + + +fz_matrix JM_derotate_page_matrix(fz_context *ctx, pdf_page *page) +{ // just the inverse of rotation + return fz_invert_matrix(JM_rotate_page_matrix(ctx, page)); +} + + +//----------------------------------------------------------------------------- +// dummy structure for various tools and utilities +//----------------------------------------------------------------------------- +struct Tools {int index;}; + +typedef struct fz_item fz_item; + +struct fz_item +{ + void *key; + fz_storable *val; + size_t size; + fz_item *next; + fz_item *prev; + fz_store *store; + const fz_store_type *type; +}; + +struct fz_store +{ + int refs; + + /* Every item in the store is kept in a doubly linked list, ordered + * by usage (so LRU entries are at the end). */ + fz_item *head; + fz_item *tail; + + /* We have a hash table that allows to quickly find a subset of the + * entries (those whose keys are indirect objects). */ + fz_hash_table *hash; + + /* We keep track of the size of the store, and keep it below max. */ + size_t max; + size_t size; + + int defer_reap_count; + int needs_reaping; +}; + + +%} diff --git a/fitz/helper-pdfinfo.i b/fitz/helper-pdfinfo.i new file mode 100644 index 0000000..97f86f2 --- /dev/null +++ b/fitz/helper-pdfinfo.i @@ -0,0 +1,231 @@ +%{ + +//----------------------------------------------------------------------------- +// Store info of a font in Python list +//----------------------------------------------------------------------------- +void JM_gather_fonts(fz_context *ctx, pdf_document *pdf, pdf_obj *dict, + PyObject *fontlist, int stream_xref) +{ + int i, n; + n = pdf_dict_len(ctx, dict); + for (i = 0; i < n; i++) + { + pdf_obj *fontdict = NULL; + pdf_obj *subtype = NULL; + pdf_obj *basefont = NULL; + pdf_obj *name = NULL; + pdf_obj *refname = NULL; + pdf_obj *encoding = NULL; + + refname = pdf_dict_get_key(ctx, dict, i); + fontdict = pdf_dict_get_val(ctx, dict, i); + if (!pdf_is_dict(ctx, fontdict)) { + fz_warn(ctx, "'%s' is no font dict (%d 0 R)", + pdf_to_name(ctx, refname), pdf_to_num(ctx, fontdict)); + continue; + } + subtype = pdf_dict_get(ctx, fontdict, PDF_NAME(Subtype)); + basefont = pdf_dict_get(ctx, fontdict, PDF_NAME(BaseFont)); + if (!basefont || pdf_is_null(ctx, basefont)) + name = pdf_dict_get(ctx, fontdict, PDF_NAME(Name)); + else + name = basefont; + encoding = pdf_dict_get(ctx, fontdict, PDF_NAME(Encoding)); + if (pdf_is_dict(ctx, encoding)) + encoding = pdf_dict_get(ctx, encoding, PDF_NAME(BaseEncoding)); + int xref = pdf_to_num(ctx, fontdict); + char *ext = "n/a"; + if (xref) ext = JM_get_fontextension(ctx, pdf, xref); + PyObject *entry = PyTuple_New(7); + PyTuple_SET_ITEM(entry, 0, Py_BuildValue("i", xref)); + PyTuple_SET_ITEM(entry, 1, Py_BuildValue("s", ext)); + PyTuple_SET_ITEM(entry, 2, Py_BuildValue("s", pdf_to_name(ctx, subtype))); + PyTuple_SET_ITEM(entry, 3, JM_EscapeStrFromStr(pdf_to_name(ctx, name))); + PyTuple_SET_ITEM(entry, 4, Py_BuildValue("s", pdf_to_name(ctx, refname))); + PyTuple_SET_ITEM(entry, 5, Py_BuildValue("s", pdf_to_name(ctx, encoding))); + PyTuple_SET_ITEM(entry, 6, Py_BuildValue("i", stream_xref)); + LIST_APPEND_DROP(fontlist, entry); + } +} + +//----------------------------------------------------------------------------- +// Store info of an image in Python list +//----------------------------------------------------------------------------- +void JM_gather_images(fz_context *ctx, pdf_document *doc, pdf_obj *dict, + PyObject *imagelist, int stream_xref) +{ + int i, n; + n = pdf_dict_len(ctx, dict); + for (i = 0; i < n; i++) { + pdf_obj *imagedict, *smask; + pdf_obj *refname = NULL; + pdf_obj *type; + pdf_obj *width; + pdf_obj *height; + pdf_obj *bpc = NULL; + pdf_obj *filter = NULL; + pdf_obj *cs = NULL; + pdf_obj *altcs; + + refname = pdf_dict_get_key(ctx, dict, i); + imagedict = pdf_dict_get_val(ctx, dict, i); + if (!pdf_is_dict(ctx, imagedict)) { + fz_warn(ctx, "'%s' is no image dict (%d 0 R)", + pdf_to_name(ctx, refname), pdf_to_num(ctx, imagedict)); + continue; + } + + type = pdf_dict_get(ctx, imagedict, PDF_NAME(Subtype)); + if (!pdf_name_eq(ctx, type, PDF_NAME(Image))) + continue; + + int xref = pdf_to_num(ctx, imagedict); + int gen = 0; + smask = pdf_dict_get(ctx, imagedict, PDF_NAME(SMask)); + if (smask) + gen = pdf_to_num(ctx, smask); + filter = pdf_dict_get(ctx, imagedict, PDF_NAME(Filter)); + if (pdf_is_array(ctx, filter)) { + filter = pdf_array_get(ctx, filter, 0); + } + + altcs = NULL; + cs = pdf_dict_get(ctx, imagedict, PDF_NAME(ColorSpace)); + if (pdf_is_array(ctx, cs)) { + pdf_obj *cses = cs; + cs = pdf_array_get(ctx, cses, 0); + if (pdf_name_eq(ctx, cs, PDF_NAME(DeviceN)) || + pdf_name_eq(ctx, cs, PDF_NAME(Separation))) { + altcs = pdf_array_get(ctx, cses, 2); + if (pdf_is_array(ctx, altcs)) + altcs = pdf_array_get(ctx, altcs, 0); + } + } + + width = pdf_dict_get(ctx, imagedict, PDF_NAME(Width)); + height = pdf_dict_get(ctx, imagedict, PDF_NAME(Height)); + bpc = pdf_dict_get(ctx, imagedict, PDF_NAME(BitsPerComponent)); + + PyObject *entry = PyTuple_New(10); + PyTuple_SET_ITEM(entry, 0, Py_BuildValue("i", xref)); + PyTuple_SET_ITEM(entry, 1, Py_BuildValue("i", gen)); + PyTuple_SET_ITEM(entry, 2, Py_BuildValue("i", pdf_to_int(ctx, width))); + PyTuple_SET_ITEM(entry, 3, Py_BuildValue("i", pdf_to_int(ctx, height))); + PyTuple_SET_ITEM(entry, 4, Py_BuildValue("i", pdf_to_int(ctx, bpc))); + PyTuple_SET_ITEM(entry, 5, JM_EscapeStrFromStr(pdf_to_name(ctx, cs))); + PyTuple_SET_ITEM(entry, 6, JM_EscapeStrFromStr(pdf_to_name(ctx, altcs))); + PyTuple_SET_ITEM(entry, 7, JM_EscapeStrFromStr(pdf_to_name(ctx, refname))); + PyTuple_SET_ITEM(entry, 8, JM_EscapeStrFromStr(pdf_to_name(ctx, filter))); + PyTuple_SET_ITEM(entry, 9, Py_BuildValue("i", stream_xref)); + LIST_APPEND_DROP(imagelist, entry); + } +} + +//----------------------------------------------------------------------------- +// Store info of a /Form xobject in Python list +//----------------------------------------------------------------------------- +void JM_gather_forms(fz_context *ctx, pdf_document *doc, pdf_obj *dict, + PyObject *imagelist, int stream_xref) +{ + int i, n = pdf_dict_len(ctx, dict); + fz_rect bbox; + pdf_obj *o = NULL, *m = NULL; + for (i = 0; i < n; i++) { + pdf_obj *imagedict; + pdf_obj *refname = NULL; + pdf_obj *type; + + refname = pdf_dict_get_key(ctx, dict, i); + imagedict = pdf_dict_get_val(ctx, dict, i); + if (!pdf_is_dict(ctx, imagedict)) { + fz_warn(ctx, "'%s' is no form dict (%d 0 R)", + pdf_to_name(ctx, refname), pdf_to_num(ctx, imagedict)); + continue; + } + + type = pdf_dict_get(ctx, imagedict, PDF_NAME(Subtype)); + if (!pdf_name_eq(ctx, type, PDF_NAME(Form))) + continue; + + o = pdf_dict_get(ctx, imagedict, PDF_NAME(BBox)); + m = pdf_dict_get(ctx, imagedict, PDF_NAME(Matrix)); + if (o) { + if (m) { + bbox = fz_transform_rect(pdf_to_rect(ctx, o), pdf_to_matrix(ctx, m)); + } + else { + bbox = pdf_to_rect(ctx, o); + } + } + else { + bbox = fz_infinite_rect; + } + int xref = pdf_to_num(ctx, imagedict); + + PyObject *entry = PyTuple_New(4); + PyTuple_SET_ITEM(entry, 0, Py_BuildValue("i", xref)); + PyTuple_SET_ITEM(entry, 1, Py_BuildValue("s", pdf_to_name(ctx, refname))); + PyTuple_SET_ITEM(entry, 2, Py_BuildValue("i", stream_xref)); + PyTuple_SET_ITEM(entry, 3, Py_BuildValue("ffff", + bbox.x0, bbox.y0, bbox.x1, bbox.y1)); + LIST_APPEND_DROP(imagelist, entry); + } +} + +//----------------------------------------------------------------------------- +// Step through /Resources, looking up image, xobject or font information +//----------------------------------------------------------------------------- +void JM_scan_resources(fz_context *ctx, pdf_document *pdf, pdf_obj *rsrc, + PyObject *liste, int what, int stream_xref) +{ + pdf_obj *font, *xobj, *subrsrc; + int i, n, sxref; + if (pdf_mark_obj(ctx, rsrc)) return; // stop on cylic dependencies + fz_try(ctx) { + if (what == 1) { + font = pdf_dict_get(ctx, rsrc, PDF_NAME(Font)); + JM_gather_fonts(ctx, pdf, font, liste, stream_xref); + n = pdf_dict_len(ctx, font); + for (i = 0; i < n; i++) { + pdf_obj *obj = pdf_dict_get_val(ctx, font, i); + if (pdf_is_stream(ctx, obj)) { + sxref = pdf_to_num(ctx, obj); + } + else { + sxref = 0; + } + subrsrc = pdf_dict_get(ctx, obj, PDF_NAME(Resources)); + if (subrsrc) + JM_scan_resources(ctx, pdf, subrsrc, liste, what, sxref); + } + } + + xobj = pdf_dict_get(ctx, rsrc, PDF_NAME(XObject)); + + if (what == 2) { // look up images + JM_gather_images(ctx, pdf, xobj, liste, stream_xref); + } + + if (what == 3) { // look up form xobjects + JM_gather_forms(ctx, pdf, xobj, liste, stream_xref); + } + + n = pdf_dict_len(ctx, xobj); + for (i = 0; i < n; i++) { + pdf_obj *obj = pdf_dict_get_val(ctx, xobj, i); + if (pdf_is_stream(ctx, obj)) { + sxref = pdf_to_num(ctx, obj); + } + else { + sxref = 0; + } + subrsrc = pdf_dict_get(ctx, obj, PDF_NAME(Resources)); + if (subrsrc) + JM_scan_resources(ctx, pdf, subrsrc, liste, what, sxref); + } + } + fz_always(ctx) pdf_unmark_obj(ctx, rsrc); + fz_catch(ctx) fz_rethrow(ctx); +} + +%} diff --git a/fitz/helper-pixmap.i b/fitz/helper-pixmap.i new file mode 100644 index 0000000..815d40d --- /dev/null +++ b/fitz/helper-pixmap.i @@ -0,0 +1,352 @@ +%{ +//----------------------------------------------------------------------------- +// pixmap helper functions +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// Clear a pixmap rectangle - my version also supports non-alpha pixmaps +//----------------------------------------------------------------------------- +int +JM_clear_pixmap_rect_with_value(fz_context *ctx, fz_pixmap *dest, int value, fz_irect b) +{ + unsigned char *destp; + int x, y, w, k, destspan; + + b = fz_intersect_irect(b, fz_pixmap_bbox(ctx, dest)); + w = b.x1 - b.x0; + y = b.y1 - b.y0; + if (w <= 0 || y <= 0) + return 0; + + destspan = dest->stride; + destp = dest->samples + (unsigned int)(destspan * (b.y0 - dest->y) + dest->n * (b.x0 - dest->x)); + + /* CMYK needs special handling (and potentially any other subtractive colorspaces) */ + if (fz_colorspace_n(ctx, dest->colorspace) == 4) { + value = 255 - value; + do { + unsigned char *s = destp; + for (x = 0; x < w; x++) { + *s++ = 0; + *s++ = 0; + *s++ = 0; + *s++ = value; + if (dest->alpha) *s++ = 255; + } + destp += destspan; + } while (--y); + return 1; + } + + do { + unsigned char *s = destp; + for (x = 0; x < w; x++) { + for (k = 0; k < dest->n - 1; k++) + *s++ = value; + if (dest->alpha) *s++ = 255; + else *s++ = value; + } + destp += destspan; + } while (--y); + return 1; +} + +//----------------------------------------------------------------------------- +// fill a rect with a color tuple +//----------------------------------------------------------------------------- +int +JM_fill_pixmap_rect_with_color(fz_context *ctx, fz_pixmap *dest, unsigned char col[5], fz_irect b) +{ + unsigned char *destp; + int x, y, w, i, destspan; + + b = fz_intersect_irect(b, fz_pixmap_bbox(ctx, dest)); + w = b.x1 - b.x0; + y = b.y1 - b.y0; + if (w <= 0 || y <= 0) + return 0; + + destspan = dest->stride; + destp = dest->samples + (unsigned int)(destspan * (b.y0 - dest->y) + dest->n * (b.x0 - dest->x)); + + do { + unsigned char *s = destp; + for (x = 0; x < w; x++) { + for (i = 0; i < dest->n; i++) + *s++ = col[i]; + } + destp += destspan; + } while (--y); + return 1; +} + +//----------------------------------------------------------------------------- +// invert a rectangle - also supports non-alpha pixmaps +//----------------------------------------------------------------------------- +int +JM_invert_pixmap_rect(fz_context *ctx, fz_pixmap *dest, fz_irect b) +{ + unsigned char *destp; + int x, y, w, i, destspan; + + b = fz_intersect_irect(b, fz_pixmap_bbox(ctx, dest)); + w = b.x1 - b.x0; + y = b.y1 - b.y0; + if (w <= 0 || y <= 0) + return 0; + + destspan = dest->stride; + destp = dest->samples + (unsigned int)(destspan * (b.y0 - dest->y) + dest->n * (b.x0 - dest->x)); + int n0 = dest->n - dest->alpha; + do { + unsigned char *s = destp; + for (x = 0; x < w; x++) { + for (i = 0; i < n0; i++) + *s++ = 255 - *s; + if (dest->alpha) *s++; + } + destp += destspan; + } while (--y); + return 1; +} + +//----------------------------------------------------------------------------- +// Return basic properties of an image provided as bytes or bytearray +// The function creates an fz_image and optionally returns it. +//----------------------------------------------------------------------------- +PyObject *JM_image_profile(fz_context *ctx, PyObject *imagedata, int keep_image) +{ + if (!EXISTS(imagedata)) { + Py_RETURN_NONE; // nothing given + } + fz_image *image = NULL; + fz_buffer *res = NULL; + PyObject *result = NULL; + unsigned char *c = NULL; + Py_ssize_t len = 0; + if (PyBytes_Check(imagedata)) { + c = PyBytes_AS_STRING(imagedata); + len = PyBytes_GET_SIZE(imagedata); + } + else if (PyByteArray_Check(imagedata)) { + c = PyByteArray_AS_STRING(imagedata); + len = PyByteArray_GET_SIZE(imagedata); + } + else { + PySys_WriteStderr("bad image data\n"); + Py_RETURN_NONE; + } + + if (len < 8) { + PySys_WriteStderr("bad image data\n"); + Py_RETURN_NONE; + } + int type = fz_recognize_image_format(ctx, c); + if (type == FZ_IMAGE_UNKNOWN) { + Py_RETURN_NONE; + } + + fz_try(ctx) { + if (keep_image) { + res = fz_new_buffer_from_copied_data(ctx, c, (size_t) len); + } + else { + res = fz_new_buffer_from_shared_data(ctx, c, (size_t) len); + } + image = fz_new_image_from_buffer(ctx, res); + int xres, yres; + fz_image_resolution(image, &xres, &yres); + const char *cs_name = fz_colorspace_name(gctx, image->colorspace); + result = PyDict_New(); + DICT_SETITEM_DROP(result, dictkey_width, + Py_BuildValue("i", image->w)); + DICT_SETITEM_DROP(result, dictkey_height, + Py_BuildValue("i", image->h)); + DICT_SETITEM_DROP(result, dictkey_xres, + Py_BuildValue("i", xres)); + DICT_SETITEM_DROP(result, dictkey_yres, + Py_BuildValue("i", yres)); + DICT_SETITEM_DROP(result, dictkey_colorspace, + Py_BuildValue("i", image->n)); + DICT_SETITEM_DROP(result, dictkey_bpc, + Py_BuildValue("i", image->bpc)); + DICT_SETITEM_DROP(result, dictkey_ext, + Py_BuildValue("s", JM_image_extension(type))); + DICT_SETITEM_DROP(result, dictkey_cs_name, + Py_BuildValue("s", cs_name)); + + if (keep_image) { + DICT_SETITEM_DROP(result, dictkey_image, + PyLong_FromVoidPtr((void *) fz_keep_image(ctx, image))); + } + } + fz_always(ctx) { + if (!keep_image) { + fz_drop_image(ctx, image); + } + else { + fz_drop_buffer(ctx, res); // drop the buffer copy + } + } + fz_catch(ctx) { + Py_CLEAR(result); + Py_RETURN_NONE; + } + PyErr_Clear(); + return result; +} + +//---------------------------------------------------------------------------- +// Version of fz_new_pixmap_from_display_list (util.c) to also support +// rendering of only the 'clip' part of the displaylist rectangle +//---------------------------------------------------------------------------- +fz_pixmap * +JM_pixmap_from_display_list(fz_context *ctx, + fz_display_list *list, + PyObject *ctm, + fz_colorspace *cs, + int alpha, + PyObject *clip, + fz_separations *seps + ) +{ + fz_rect rect = fz_bound_display_list(ctx, list); + fz_matrix matrix = JM_matrix_from_py(ctm); + fz_pixmap *pix = NULL; + fz_var(pix); + fz_device *dev = NULL; + fz_var(dev); + fz_rect rclip = JM_rect_from_py(clip); + rect = fz_intersect_rect(rect, rclip); // no-op if clip is not given + + rect = fz_transform_rect(rect, matrix); + fz_irect irect = fz_round_rect(rect); + + pix = fz_new_pixmap_with_bbox(ctx, cs, irect, seps, alpha); + if (alpha) + fz_clear_pixmap(ctx, pix); + else + fz_clear_pixmap_with_value(ctx, pix, 0xFF); + + fz_try(ctx) { + if (!fz_is_infinite_rect(rclip)) { + dev = fz_new_draw_device_with_bbox(ctx, matrix, pix, &irect); + fz_run_display_list(ctx, list, dev, fz_identity, rclip, NULL); + } + else { + dev = fz_new_draw_device(ctx, matrix, pix); + fz_run_display_list(ctx, list, dev, fz_identity, fz_infinite_rect, NULL); + } + + fz_close_device(ctx, dev); + } + fz_always(ctx) { + fz_drop_device(ctx, dev); + } + fz_catch(ctx) { + fz_drop_pixmap(ctx, pix); + fz_rethrow(ctx); + } + return pix; +} + +//---------------------------------------------------------------------------- +// Pixmap creation directly using a short-lived displaylist, so we can support +// separations. +//---------------------------------------------------------------------------- +fz_pixmap * +JM_pixmap_from_page(fz_context *ctx, + fz_document *doc, + fz_page *page, + PyObject *ctm, + fz_colorspace *cs, + int alpha, + int annots, + PyObject *clip + ) +{ + enum { SPOTS_NONE, SPOTS_OVERPRINT_SIM, SPOTS_FULL }; + int spots; + if (FZ_ENABLE_SPOT_RENDERING) + spots = SPOTS_OVERPRINT_SIM; + else + spots = SPOTS_NONE; + + fz_separations *seps = NULL; + fz_pixmap *pix = NULL; + fz_colorspace *oi = NULL; + fz_var(oi); + fz_colorspace *colorspace = cs; + fz_rect rect; + fz_irect bbox; + fz_device *dev = NULL; + fz_var(dev); + fz_matrix matrix = JM_matrix_from_py(ctm); + rect = fz_bound_page(ctx, page); + fz_rect rclip = JM_rect_from_py(clip); + rect = fz_intersect_rect(rect, rclip); // no-op if clip is not given + rect = fz_transform_rect(rect, matrix); + bbox = fz_round_rect(rect); + + fz_try(ctx) { + // Pixmap of the document's /OutputIntents ("output intents") + oi = fz_document_output_intent(ctx, doc); + // if present and compatible, use it instead of the parameter + if (oi) { + if (fz_colorspace_n(ctx, oi) == fz_colorspace_n(ctx, cs)) { + colorspace = fz_keep_colorspace(ctx, oi); + } + } + + // check if spots rendering is available and if so use separations + if (spots != SPOTS_NONE) { + seps = fz_page_separations(ctx, page); + if (seps) { + int i, n = fz_count_separations(ctx, seps); + if (spots == SPOTS_FULL) + for (i = 0; i < n; i++) + fz_set_separation_behavior(ctx, seps, i, FZ_SEPARATION_SPOT); + else + for (i = 0; i < n; i++) + fz_set_separation_behavior(ctx, seps, i, FZ_SEPARATION_COMPOSITE); + } else if (fz_page_uses_overprint(ctx, page)) { + /* This page uses overprint, so we need an empty + * sep object to force the overprint simulation on. */ + seps = fz_new_separations(ctx, 0); + } else if (oi && fz_colorspace_n(ctx, oi) != fz_colorspace_n(ctx, colorspace)) { + /* We have an output intent, and it's incompatible + * with the colorspace our device needs. Force the + * overprint simulation on, because this ensures that + * we 'simulate' the output intent too. */ + seps = fz_new_separations(ctx, 0); + } + } + + pix = fz_new_pixmap_with_bbox(ctx, colorspace, bbox, seps, alpha); + + if (alpha) { + fz_clear_pixmap(ctx, pix); + } else { + fz_clear_pixmap_with_value(ctx, pix, 0xFF); + } + + dev = fz_new_draw_device(ctx, matrix, pix); + if (annots) { + fz_run_page(ctx, page, dev, fz_identity, NULL); + } else { + fz_run_page_contents(ctx, page, dev, fz_identity, NULL); + } + fz_close_device(ctx, dev); + } + fz_always(ctx) { + fz_drop_device(ctx, dev); + fz_drop_separations(ctx, seps); + fz_drop_colorspace(ctx, oi); + } + fz_catch(ctx) { + fz_rethrow(ctx); + } + return pix; +} + +%} diff --git a/fitz/helper-portfolio.i b/fitz/helper-portfolio.i new file mode 100644 index 0000000..89c4255 --- /dev/null +++ b/fitz/helper-portfolio.i @@ -0,0 +1,66 @@ +%{ +//----------------------------------------------------------------------------- +// perform some cleaning if we have /EmbeddedFiles: +// (1) remove any /Limits if /Names exists +// (2) remove any empty /Collection +// (3) set /PageMode/UseAttachments +//----------------------------------------------------------------------------- +void JM_embedded_clean(fz_context *ctx, pdf_document *pdf) +{ + pdf_obj *root = pdf_dict_get(ctx, pdf_trailer(ctx, pdf), PDF_NAME(Root)); + + // remove any empty /Collection entry + pdf_obj *coll = pdf_dict_get(ctx, root, PDF_NAME(Collection)); + if (coll && pdf_dict_len(ctx, coll) == 0) + pdf_dict_del(ctx, root, PDF_NAME(Collection)); + + pdf_obj *efiles = pdf_dict_getl(ctx, root, + PDF_NAME(Names), + PDF_NAME(EmbeddedFiles), + PDF_NAME(Names), + NULL); + if (efiles) { + pdf_dict_put_name(ctx, root, PDF_NAME(PageMode), "UseAttachments"); + } + return; +} + +//----------------------------------------------------------------------------- +// embed a new file in a PDF (not only /EmbeddedFiles entries) +//----------------------------------------------------------------------------- +pdf_obj *JM_embed_file(fz_context *ctx, + pdf_document *pdf, + fz_buffer *buf, + char *filename, + char *ufilename, + char *desc, + int compress) +{ + size_t len = 0; + pdf_obj *ef, *f, *params, *val = NULL; + fz_var(val); + fz_try(ctx) { + val = pdf_new_dict(ctx, pdf, 6); + pdf_dict_put_dict(ctx, val, PDF_NAME(CI), 4); + ef = pdf_dict_put_dict(ctx, val, PDF_NAME(EF), 4); + pdf_dict_put_text_string(ctx, val, PDF_NAME(F), filename); + pdf_dict_put_text_string(ctx, val, PDF_NAME(UF), ufilename); + pdf_dict_put_text_string(ctx, val, PDF_NAME(Desc), desc); + pdf_dict_put(ctx, val, PDF_NAME(Type), PDF_NAME(Filespec)); + f = pdf_add_stream(ctx, pdf, + fz_new_buffer_from_copied_data(ctx, " ", 1), + NULL, 0); + pdf_dict_put_drop(ctx, ef, PDF_NAME(F), f); + JM_update_stream(ctx, pdf, f, buf, compress); + len = fz_buffer_storage(ctx, buf, NULL); + pdf_dict_put_int(ctx, f, PDF_NAME(DL), len); + pdf_dict_put_int(ctx, f, PDF_NAME(Length), len); + params = pdf_dict_put_dict(ctx, f, PDF_NAME(Params), 4); + pdf_dict_put_int(ctx, params, PDF_NAME(Size), len); + } + fz_catch(ctx) { + fz_rethrow(ctx); + } + return val; +} +%} diff --git a/fitz/helper-python.i b/fitz/helper-python.i new file mode 100644 index 0000000..810ec97 --- /dev/null +++ b/fitz/helper-python.i @@ -0,0 +1,1439 @@ +%pythoncode %{ +# ------------------------------------------------------------------------------ +# link kinds and link flags +# ------------------------------------------------------------------------------ +LINK_NONE = 0 +LINK_GOTO = 1 +LINK_URI = 2 +LINK_LAUNCH = 3 +LINK_NAMED = 4 +LINK_GOTOR = 5 +LINK_FLAG_L_VALID = 1 +LINK_FLAG_T_VALID = 2 +LINK_FLAG_R_VALID = 4 +LINK_FLAG_B_VALID = 8 +LINK_FLAG_FIT_H = 16 +LINK_FLAG_FIT_V = 32 +LINK_FLAG_R_IS_ZOOM = 64 + +# ------------------------------------------------------------------------------ +# Text handling flags +# ------------------------------------------------------------------------------ +TEXT_ALIGN_LEFT = 0 +TEXT_ALIGN_CENTER = 1 +TEXT_ALIGN_RIGHT = 2 +TEXT_ALIGN_JUSTIFY = 3 + +TEXT_OUTPUT_TEXT = 0 +TEXT_OUTPUT_HTML = 1 +TEXT_OUTPUT_JSON = 2 +TEXT_OUTPUT_XML = 3 +TEXT_OUTPUT_XHTML = 4 + +TEXT_PRESERVE_LIGATURES = 1 +TEXT_PRESERVE_WHITESPACE = 2 +TEXT_PRESERVE_IMAGES = 4 +TEXT_INHIBIT_SPACES = 8 + +# ------------------------------------------------------------------------------ +# Simple text encoding options +# ------------------------------------------------------------------------------ +TEXT_ENCODING_LATIN = 0 +TEXT_ENCODING_GREEK = 1 +TEXT_ENCODING_CYRILLIC = 2 +# ------------------------------------------------------------------------------ +# Stamp annotation icon numbers +# ------------------------------------------------------------------------------ +STAMP_Approved = 0 +STAMP_AsIs = 1 +STAMP_Confidential = 2 +STAMP_Departmental = 3 +STAMP_Experimental = 4 +STAMP_Expired = 5 +STAMP_Final = 6 +STAMP_ForComment = 7 +STAMP_ForPublicRelease = 8 +STAMP_NotApproved = 9 +STAMP_NotForPublicRelease = 10 +STAMP_Sold = 11 +STAMP_TopSecret = 12 +STAMP_Draft = 13 + +# ------------------------------------------------------------------------------ +# Base 14 font names and dictionary +# ------------------------------------------------------------------------------ +Base14_fontnames = ( + "Courier", + "Courier-Oblique", + "Courier-Bold", + "Courier-BoldOblique", + "Helvetica", + "Helvetica-Oblique", + "Helvetica-Bold", + "Helvetica-BoldOblique", + "Times-Roman", + "Times-Italic", + "Times-Bold", + "Times-BoldItalic", + "Symbol", + "ZapfDingbats", +) + +Base14_fontdict = {} +for f in Base14_fontnames: + Base14_fontdict[f.lower()] = f +Base14_fontdict["helv"] = "Helvetica" +Base14_fontdict["heit"] = "Helvetica-Oblique" +Base14_fontdict["hebo"] = "Helvetica-Bold" +Base14_fontdict["hebi"] = "Helvetica-BoldOblique" +Base14_fontdict["cour"] = "Courier" +Base14_fontdict["coit"] = "Courier-Oblique" +Base14_fontdict["cobo"] = "Courier-Bold" +Base14_fontdict["cobi"] = "Courier-BoldOblique" +Base14_fontdict["tiro"] = "Times-Roman" +Base14_fontdict["tibo"] = "Times-Bold" +Base14_fontdict["tiit"] = "Times-Italic" +Base14_fontdict["tibi"] = "Times-BoldItalic" +Base14_fontdict["symb"] = "Symbol" +Base14_fontdict["zadb"] = "ZapfDingbats" + +annot_skel = { + "goto1": "<>/Rect[%s]/BS<>/Subtype/Link>>", + "goto2": "<>/Rect[%s]/BS<>/Subtype/Link>>", + "gotor1": "<>>>/Rect[%s]/BS<>/Subtype/Link>>", + "gotor2": "<>/Rect[%s]/BS<>/Subtype/Link>>", + "launch": "<>>>/Rect[%s]/BS<>/Subtype/Link>>", + "uri": "<>/Rect[%s]/BS<>/Subtype/Link>>", + "named": "<>/Rect[%s]/BS<>/Subtype/Link>>", +} + + +def _toc_remove_page(toc, first, last): + """ Remove all ToC entries pointing to certain pages. + + Args: + toc: old table of contents generated with getToC(False). + first: (int) number of first page to remove. + last: (int) number of last page to remove. + Returns: + Modified table of contents, which should be used by PDF + document method setToC. + """ + toc2 = [] # intermediate new toc + count = last - first + 1 # number of pages to remove + # step 1: remove numbers from toc + for t in toc: + if first <= t[2] <= last: # skip entries between first and last + continue + if t[2] < first: # keep smaller page numbers + toc2.append(t) + continue + # larger page numbers + t[2] -= count # decrease page number + d = t[3] + if d["kind"] == LINK_GOTO: + d["page"] -= count + t[3] = d + toc2.append(t) + + toc3 = [] # final new toc + old_lvl = 0 + + # step 2: deal with hierarchy lvl gaps > 1 + for t in toc2: + while t[0] - old_lvl > 1: # lvl gap too large + old_lvl += 1 # increase previous lvl + toc3.append([old_lvl] + t[1:]) # insert a filler item + old_lvl = t[0] + toc3.append(t) + + return toc3 + + +def getTextlength(text, fontname="helv", fontsize=11, encoding=0): + """Calculate length of a string for a given built-in font. + + Args: + fontname: name of the font. + fontsize: size of font in points. + encoding: encoding to use (0=Latin, 1=Greek, 2=Cyrillic). + Returns: + (float) length of text. + """ + fontname = fontname.lower() + basename = Base14_fontdict.get(fontname, None) + + glyphs = None + if basename == "Symbol": + glyphs = symbol_glyphs + if basename == "ZapfDingbats": + glyphs = zapf_glyphs + if glyphs is not None: + w = sum([glyphs[ord(c)][1] if ord(c) < 256 else glyphs[183][1] for c in text]) + return w * fontsize + + if fontname in Base14_fontdict.keys(): + return TOOLS._measure_string( + text, Base14_fontdict[fontname], fontsize, encoding + ) + + if fontname in ( + "china-t", + "china-s", + "china-ts", + "china-ss", + "japan", + "japan-s", + "korea", + "korea-s", + ): + return len(text) * fontsize + + raise ValueError("Font '%s' is unsupported" % fontname) + + +# ------------------------------------------------------------------------------ +# Glyph list for the built-in font 'ZapfDingbats' +# ------------------------------------------------------------------------------ +zapf_glyphs = ( + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (32, 0.278), + (33, 0.974), + (34, 0.961), + (35, 0.974), + (36, 0.98), + (37, 0.719), + (38, 0.789), + (39, 0.79), + (40, 0.791), + (41, 0.69), + (42, 0.96), + (43, 0.939), + (44, 0.549), + (45, 0.855), + (46, 0.911), + (47, 0.933), + (48, 0.911), + (49, 0.945), + (50, 0.974), + (51, 0.755), + (52, 0.846), + (53, 0.762), + (54, 0.761), + (55, 0.571), + (56, 0.677), + (57, 0.763), + (58, 0.76), + (59, 0.759), + (60, 0.754), + (61, 0.494), + (62, 0.552), + (63, 0.537), + (64, 0.577), + (65, 0.692), + (66, 0.786), + (67, 0.788), + (68, 0.788), + (69, 0.79), + (70, 0.793), + (71, 0.794), + (72, 0.816), + (73, 0.823), + (74, 0.789), + (75, 0.841), + (76, 0.823), + (77, 0.833), + (78, 0.816), + (79, 0.831), + (80, 0.923), + (81, 0.744), + (82, 0.723), + (83, 0.749), + (84, 0.79), + (85, 0.792), + (86, 0.695), + (87, 0.776), + (88, 0.768), + (89, 0.792), + (90, 0.759), + (91, 0.707), + (92, 0.708), + (93, 0.682), + (94, 0.701), + (95, 0.826), + (96, 0.815), + (97, 0.789), + (98, 0.789), + (99, 0.707), + (100, 0.687), + (101, 0.696), + (102, 0.689), + (103, 0.786), + (104, 0.787), + (105, 0.713), + (106, 0.791), + (107, 0.785), + (108, 0.791), + (109, 0.873), + (110, 0.761), + (111, 0.762), + (112, 0.762), + (113, 0.759), + (114, 0.759), + (115, 0.892), + (116, 0.892), + (117, 0.788), + (118, 0.784), + (119, 0.438), + (120, 0.138), + (121, 0.277), + (122, 0.415), + (123, 0.392), + (124, 0.392), + (125, 0.668), + (126, 0.668), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (183, 0.788), + (161, 0.732), + (162, 0.544), + (163, 0.544), + (164, 0.91), + (165, 0.667), + (166, 0.76), + (167, 0.76), + (168, 0.776), + (169, 0.595), + (170, 0.694), + (171, 0.626), + (172, 0.788), + (173, 0.788), + (174, 0.788), + (175, 0.788), + (176, 0.788), + (177, 0.788), + (178, 0.788), + (179, 0.788), + (180, 0.788), + (181, 0.788), + (182, 0.788), + (183, 0.788), + (184, 0.788), + (185, 0.788), + (186, 0.788), + (187, 0.788), + (188, 0.788), + (189, 0.788), + (190, 0.788), + (191, 0.788), + (192, 0.788), + (193, 0.788), + (194, 0.788), + (195, 0.788), + (196, 0.788), + (197, 0.788), + (198, 0.788), + (199, 0.788), + (200, 0.788), + (201, 0.788), + (202, 0.788), + (203, 0.788), + (204, 0.788), + (205, 0.788), + (206, 0.788), + (207, 0.788), + (208, 0.788), + (209, 0.788), + (210, 0.788), + (211, 0.788), + (212, 0.894), + (213, 0.838), + (214, 1.016), + (215, 0.458), + (216, 0.748), + (217, 0.924), + (218, 0.748), + (219, 0.918), + (220, 0.927), + (221, 0.928), + (222, 0.928), + (223, 0.834), + (224, 0.873), + (225, 0.828), + (226, 0.924), + (227, 0.924), + (228, 0.917), + (229, 0.93), + (230, 0.931), + (231, 0.463), + (232, 0.883), + (233, 0.836), + (234, 0.836), + (235, 0.867), + (236, 0.867), + (237, 0.696), + (238, 0.696), + (239, 0.874), + (183, 0.788), + (241, 0.874), + (242, 0.76), + (243, 0.946), + (244, 0.771), + (245, 0.865), + (246, 0.771), + (247, 0.888), + (248, 0.967), + (249, 0.888), + (250, 0.831), + (251, 0.873), + (252, 0.927), + (253, 0.97), + (183, 0.788), + (183, 0.788), +) + +# ------------------------------------------------------------------------------ +# Glyph list for the built-in font 'Symbol' +# ------------------------------------------------------------------------------ +symbol_glyphs = ( + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (32, 0.25), + (33, 0.333), + (34, 0.713), + (35, 0.5), + (36, 0.549), + (37, 0.833), + (38, 0.778), + (39, 0.439), + (40, 0.333), + (41, 0.333), + (42, 0.5), + (43, 0.549), + (44, 0.25), + (45, 0.549), + (46, 0.25), + (47, 0.278), + (48, 0.5), + (49, 0.5), + (50, 0.5), + (51, 0.5), + (52, 0.5), + (53, 0.5), + (54, 0.5), + (55, 0.5), + (56, 0.5), + (57, 0.5), + (58, 0.278), + (59, 0.278), + (60, 0.549), + (61, 0.549), + (62, 0.549), + (63, 0.444), + (64, 0.549), + (65, 0.722), + (66, 0.667), + (67, 0.722), + (68, 0.612), + (69, 0.611), + (70, 0.763), + (71, 0.603), + (72, 0.722), + (73, 0.333), + (74, 0.631), + (75, 0.722), + (76, 0.686), + (77, 0.889), + (78, 0.722), + (79, 0.722), + (80, 0.768), + (81, 0.741), + (82, 0.556), + (83, 0.592), + (84, 0.611), + (85, 0.69), + (86, 0.439), + (87, 0.768), + (88, 0.645), + (89, 0.795), + (90, 0.611), + (91, 0.333), + (92, 0.863), + (93, 0.333), + (94, 0.658), + (95, 0.5), + (96, 0.5), + (97, 0.631), + (98, 0.549), + (99, 0.549), + (100, 0.494), + (101, 0.439), + (102, 0.521), + (103, 0.411), + (104, 0.603), + (105, 0.329), + (106, 0.603), + (107, 0.549), + (108, 0.549), + (109, 0.576), + (110, 0.521), + (111, 0.549), + (112, 0.549), + (113, 0.521), + (114, 0.549), + (115, 0.603), + (116, 0.439), + (117, 0.576), + (118, 0.713), + (119, 0.686), + (120, 0.493), + (121, 0.686), + (122, 0.494), + (123, 0.48), + (124, 0.2), + (125, 0.48), + (126, 0.549), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (183, 0.46), + (160, 0.25), + (161, 0.62), + (162, 0.247), + (163, 0.549), + (164, 0.167), + (165, 0.713), + (166, 0.5), + (167, 0.753), + (168, 0.753), + (169, 0.753), + (170, 0.753), + (171, 1.042), + (172, 0.713), + (173, 0.603), + (174, 0.987), + (175, 0.603), + (176, 0.4), + (177, 0.549), + (178, 0.411), + (179, 0.549), + (180, 0.549), + (181, 0.576), + (182, 0.494), + (183, 0.46), + (184, 0.549), + (185, 0.549), + (186, 0.549), + (187, 0.549), + (188, 1), + (189, 0.603), + (190, 1), + (191, 0.658), + (192, 0.823), + (193, 0.686), + (194, 0.795), + (195, 0.987), + (196, 0.768), + (197, 0.768), + (198, 0.823), + (199, 0.768), + (200, 0.768), + (201, 0.713), + (202, 0.713), + (203, 0.713), + (204, 0.713), + (205, 0.713), + (206, 0.713), + (207, 0.713), + (208, 0.768), + (209, 0.713), + (210, 0.79), + (211, 0.79), + (212, 0.89), + (213, 0.823), + (214, 0.549), + (215, 0.549), + (216, 0.713), + (217, 0.603), + (218, 0.603), + (219, 1.042), + (220, 0.987), + (221, 0.603), + (222, 0.987), + (223, 0.603), + (224, 0.494), + (225, 0.329), + (226, 0.79), + (227, 0.79), + (228, 0.786), + (229, 0.713), + (230, 0.384), + (231, 0.384), + (232, 0.384), + (233, 0.384), + (234, 0.384), + (235, 0.384), + (236, 0.494), + (237, 0.494), + (238, 0.494), + (239, 0.494), + (183, 0.46), + (241, 0.329), + (242, 0.274), + (243, 0.686), + (244, 0.686), + (245, 0.686), + (246, 0.384), + (247, 0.549), + (248, 0.384), + (249, 0.384), + (250, 0.384), + (251, 0.384), + (252, 0.494), + (253, 0.494), + (254, 0.494), + (183, 0.46), +) + + +class linkDest(object): + """link or outline destination details""" + + def __init__(self, obj, rlink): + isExt = obj.isExternal + isInt = not isExt + self.dest = "" + self.fileSpec = "" + self.flags = 0 + self.isMap = False + self.isUri = False + self.kind = LINK_NONE + self.lt = Point(0, 0) + self.named = "" + self.newWindow = "" + self.page = obj.page + self.rb = Point(0, 0) + self.uri = obj.uri + if rlink and not self.uri.startswith("#"): + self.uri = "#%i,%g,%g" % (rlink[0] + 1, rlink[1], rlink[2]) + if obj.isExternal: + self.page = -1 + self.kind = LINK_URI + if not self.uri: + self.page = -1 + self.kind = LINK_NONE + if isInt and self.uri: + if self.uri.startswith("#"): + self.named = "" + self.kind = LINK_GOTO + ftab = self.uri[1:].split(",") + if len(ftab) == 3: + self.page = int(ftab[0]) - 1 + self.lt = Point(float(ftab[1]), float(ftab[2])) + self.flags = self.flags | LINK_FLAG_L_VALID | LINK_FLAG_T_VALID + else: + try: + self.page = int(ftab[0]) - 1 + except: + self.kind = LINK_NAMED + self.named = self.uri[1:] + else: + self.kind = LINK_NAMED + self.named = self.uri + if obj.isExternal: + if self.uri.startswith(("http://", "https://", "mailto:", "ftp://")): + self.isUri = True + self.kind = LINK_URI + elif self.uri.startswith("file://"): + self.fileSpec = self.uri[7:] + self.isUri = False + self.uri = "" + self.kind = LINK_LAUNCH + ftab = self.fileSpec.split("#") + if len(ftab) == 2: + if ftab[1].startswith("page="): + self.kind = LINK_GOTOR + self.fileSpec = ftab[0] + self.page = int(ftab[1][5:]) - 1 + else: + self.isUri = True + self.kind = LINK_LAUNCH + + +# ------------------------------------------------------------------------------- +# "Now" timestamp in PDF Format +# ------------------------------------------------------------------------------- +def getPDFnow(): + import time + + tz = "%s'%s'" % ( + str(abs(time.altzone // 3600)).rjust(2, "0"), + str((abs(time.altzone // 60) % 60)).rjust(2, "0"), + ) + tstamp = time.strftime("D:%Y%m%d%H%M%S", time.localtime()) + if time.altzone > 0: + tstamp += "-" + tz + elif time.altzone < 0: + tstamp += "+" + tz + else: + pass + return tstamp + + +def getPDFstr(s): + """ Return a PDF string depending on its coding. + + Notes: + Returns a string bracketed with either "()" or "<>" for hex values. + If only ascii then "(original)" is returned, else if only 8 bit chars + then "(original)" with interspersed octal strings \nnn is returned, + else a string "" is returned, where [hexstring] is the + UTF-16BE encoding of the original. + """ + if not bool(s): + return "()" + + def make_utf16be(s): + r = hexlify(bytearray([254, 255]) + bytearray(s, "UTF-16BE")) + t = r if fitz_py2 else r.decode() + return "<" + t + ">" # brackets indicate hex + + # The following either returns the original string with mixed-in + # octal numbers \nnn for chars outside the ASCII range, or returns + # the UTF-16BE BOM version of the string. + r = "" + for c in s: + oc = ord(c) + if oc > 255: # shortcut if beyond 8-bit code range + return make_utf16be(s) + + if oc > 31 and oc < 127: # in ASCII range + if c in ("(", ")", "\\"): # these need to be escaped + r += "\\" + r += c + continue + + if oc > 127: # beyond ASCII + r += "\\%03o" % oc + continue + + # now the white spaces + if oc == 8: # backspace + r += "\\b" + elif oc == 9: # tab + r += "\\t" + elif oc == 10: # line feed + r += "\\n" + elif oc == 12: # form feed + r += "\\f" + elif oc == 13: # carriage return + r += "\\r" + else: + r += "\\267" # unsupported: replace by 0xB7 + + return "(" + r + ")" + + +def getTJstr(text, glyphs, simple, ordering): + """ Return a PDF string enclosed in [] brackets, suitable for the PDF TJ + operator. + + Notes: + The input string is converted to either 2 or 4 hex digits per character. + Args: + simple: no glyphs: 2-chars, use char codes as the glyph + glyphs: 2-chars, use glyphs instead of char codes (Symbol, + ZapfDingbats) + not simple: ordering < 0: 4-chars, use glyphs not char codes + ordering >=0: a CJK font! 4 chars, use char codes as glyphs + """ + if text.startswith("[<") and text.endswith(">]"): # already done + return text + + if not bool(text): + return "[<>]" + + if simple: # each char or its glyph is coded as a 2-byte hex + if glyphs is None: # not Symbol, not ZapfDingbats: use char code + otxt = "".join(["%02x" % ord(c) if ord(c) < 256 else "b7" for c in text]) + else: # Symbol or ZapfDingbats: use glyphs + otxt = "".join( + ["%02x" % glyphs[ord(c)][0] if ord(c) < 256 else "b7" for c in text] + ) + return "[<" + otxt + ">]" + + # non-simple fonts: each char or its glyph is coded as 4-byte hex + if ordering < 0: # not a CJK font: use the glyphs + otxt = "".join(["%04x" % glyphs[ord(c)][0] for c in text]) + else: # CJK: use the char codes + otxt = "".join(["%04x" % ord(c) for c in text]) + + return "[<" + otxt + ">]" + + +""" +Information taken from the following web sites: +www.din-formate.de +www.din-formate.info/amerikanische-formate.html +www.directtools.de/wissen/normen/iso.htm +""" +paperSizes = { # known paper formats @ 72 dpi + "a0": (2384, 3370), + "a1": (1684, 2384), + "a10": (74, 105), + "a2": (1191, 1684), + "a3": (842, 1191), + "a4": (595, 842), + "a5": (420, 595), + "a6": (298, 420), + "a7": (210, 298), + "a8": (147, 210), + "a9": (105, 147), + "b0": (2835, 4008), + "b1": (2004, 2835), + "b10": (88, 125), + "b2": (1417, 2004), + "b3": (1001, 1417), + "b4": (709, 1001), + "b5": (499, 709), + "b6": (354, 499), + "b7": (249, 354), + "b8": (176, 249), + "b9": (125, 176), + "c0": (2599, 3677), + "c1": (1837, 2599), + "c10": (79, 113), + "c2": (1298, 1837), + "c3": (918, 1298), + "c4": (649, 918), + "c5": (459, 649), + "c6": (323, 459), + "c7": (230, 323), + "c8": (162, 230), + "c9": (113, 162), + "card-4x6": (288, 432), + "card-5x7": (360, 504), + "commercial": (297, 684), + "executive": (522, 756), + "invoice": (396, 612), + "ledger": (792, 1224), + "legal": (612, 1008), + "legal-13": (612, 936), + "letter": (612, 792), + "monarch": (279, 540), + "tabloid-extra": (864, 1296), +} + + +def PaperSize(s): + """Return a tuple (width, height) for a given paper format string. + + Notes: + 'A4-L' will return (842, 595), the values for A4 landscape. + Suffix '-P' and no suffix return the portrait tuple. + """ + size = s.lower() + f = "p" + if size.endswith("-l"): + f = "l" + size = size[:-2] + if size.endswith("-p"): + size = size[:-2] + rc = paperSizes.get(size, (-1, -1)) + if f == "p": + return rc + return (rc[1], rc[0]) + + +def PaperRect(s): + """Return a Rect for the paper size indicated in string 's'. Must conform to the argument of method 'PaperSize', which will be invoked. + """ + width, height = PaperSize(s) + return Rect(0.0, 0.0, width, height) + + +def CheckParent(o): + if not hasattr(o, "parent") or o.parent is None: + raise ValueError("orphaned object: parent is None") + + +def CheckColor(c): + if c: + if ( + type(c) not in (list, tuple) + or len(c) not in (1, 3, 4) + or min(c) < 0 + or max(c) > 1 + ): + raise ValueError("need 1, 3 or 4 color components in range 0 to 1") + + +def ColorCode(c, f): + if not c: + return "" + if hasattr(c, "__float__"): + c = (c,) + CheckColor(c) + if len(c) == 1: + s = "%g " % c[0] + return s + "G " if f == "c" else s + "g " + + if len(c) == 3: + s = "%g %g %g " % tuple(c) + return s + "RG " if f == "c" else s + "rg " + + s = "%g %g %g %g " % tuple(c) + return s + "K " if f == "c" else s + "k " + + +def JM_TUPLE(o): + return tuple(map(lambda x: round(x, 5) if abs(x) >= 1e-4 else 0, o)) + + +def CheckRect(r): + """Check whether an object is non-degenerate rect-like. + + It must be a sequence of 4 numbers. + """ + try: + if r.__len__() != 4: + return False + for i in range(len(r)): + a = float(r[i]) + except: + return False + + r = Rect(r) + return not (r.isEmpty or r.isInfinite) + + +def CheckQuad(q): + """Check whether an object is convex, not empty quad-like. + + It must be a sequence of 4 number pairs. + """ + try: + if q.__len__() != 4: + return False + for i in range(len(q)): + if q[i].__len__() != 2: + return False + a = float(q[i][0]) + a = float(q[i][1]) + except: + return False + + return Quad(q).isConvex + + +def CheckMarkerArg(quads): + if CheckRect(quads): + r = Rect(quads) + return (r.quad,) + if CheckQuad(quads): + return (quads,) + for q in quads: + if not (CheckRect(q) or CheckQuad(q)): + raise ValueError("bad quads entry") + return quads + + +def CheckMorph(o): + if not bool(o): + return False + if not (type(o) in (list, tuple) and len(o) == 2): + raise ValueError("morph must be a sequence of length 2") + if not (len(o[0]) == 2 and len(o[1]) == 6): + raise ValueError("invalid morph parm 0") + if not o[1][4] == o[1][5] == 0: + raise ValueError("invalid morph parm 1") + return True + + +def CheckFont(page, fontname): + """Return an entry in the page's font list if reference name matches. + """ + for f in page.getFontList(): + if f[4] == fontname: + return f + if f[3].lower() == fontname.lower(): + return f + + +def CheckFontInfo(doc, xref): + """Return a font info if present in the document. + """ + for f in doc.FontInfos: + if xref == f[0]: + return f + + +def UpdateFontInfo(doc, info): + xref = info[0] + found = False + for i, fi in enumerate(doc.FontInfos): + if fi[0] == xref: + found = True + break + if found: + doc.FontInfos[i] = info + else: + doc.FontInfos.append(info) + + +def DUMMY(*args, **kw): + return + + +def planishLine(p1, p2): + """Return matrix which flattens out the line from p1 to p2. + + Args: + p1, p2: point_like + Returns: + Matrix which maps p1 to Point(0,0) and p2 to a point on the x axis at + the same distance to Point(0,0). Will always combine a rotation and a + transformation. + """ + p1 = Point(p1) + p2 = Point(p2) + return Matrix(TOOLS._hor_matrix(p1, p2)) + + +def ImageProperties(img): + """ Return basic properties of an image. + + Args: + img: bytes, bytearray, io.BytesIO object or an opened image file. + Returns: + A dictionary with keys width, height, colorspace.n, bpc, type, ext and size, + where 'type' is the MuPDF image type (0 to 14) and 'ext' the suitable + file extension. + """ + if type(img) is io.BytesIO: + stream = img.getvalue() + elif hasattr(img, "read"): + stream = img.read() + elif type(img) in (bytes, bytearray): + stream = img + else: + raise ValueError("bad argument 'img'") + + return TOOLS.image_profile(stream) + + +def ConversionHeader(i, filename="unknown"): + t = i.lower() + html = """ + + + + +\n""" + + xml = ( + """ +\n""" + % filename + ) + + xhtml = """ + + + + + +\n""" + + text = "" + json = '{"document": "%s", "pages": [\n' % filename + if t == "html": + r = html + elif t == "json": + r = json + elif t == "xml": + r = xml + elif t == "xhtml": + r = xhtml + else: + r = text + + return r + + +def ConversionTrailer(i): + t = i.lower() + text = "" + json = "]\n}" + html = "\n\n" + xml = "\n" + xhtml = html + if t == "html": + r = html + elif t == "json": + r = json + elif t == "xml": + r = xml + elif t == "xhtml": + r = xhtml + else: + r = text + + return r + + +def DerotateRect(cropbox, rect, deg): + """Calculate the non-rotated rect version. + + Args: + cropbox: the page's /CropBox + rect: rectangle + deg: the page's /Rotate value + Returns: + Rectangle in original (/CropBox) coordinates + """ + while deg < 0: + deg += 360 + while deg >= 360: + deg -= 360 + if deg % 90 > 0: + deg = 0 + if deg == 0: # no rotation: no-op + return rect + points = [] # store the new rect points here + for p in rect.quad: # run through the rect's quad points + if deg == 90: + q = (p.y, cropbox.height - p.x) + elif deg == 270: + q = (cropbox.width - p.y, p.x) + else: + q = (cropbox.width - p.x, cropbox.height - p.y) + points.append(q) + + r = Rect(points[0], points[0]) + for p in points[1:]: + r |= p + return r + + +def get_highlight_selection(page, start=None, stop=None, clip=None): + """Return rectangles of text lines between two points. + + Notes: + The default of 'start' is top-left of 'clip'. The default of 'stop' + is bottom-reight of 'clip'. + + Args: + start: start point_like + stop: end point_like, must be 'below' start + clip: consider this rect_like only, default is page rectangle + Returns: + List of line bbox intersections with the area established by the + parameters. + """ + # validate and normalize arguments + if clip is None: + clip = page.rect + clip = Rect(clip) + if start is None: + start = clip.tl + start = Point(start) + if stop is None: + stop = clip.br + stop = Point(stop) + + # extract text of page (no images) + blocks = page.getText( + "dict", flags=TEXT_PRESERVE_LIGATURES + TEXT_PRESERVE_WHITESPACE + )["blocks"] + rectangles = [] # we will be returning this + lines = [] # intermediate bbox store + for b in blocks: + for line in b["lines"]: + bbox = Rect(line["bbox"]) & clip # line bbox intersection + if bbox.isEmpty: # do not output empty rectangles + continue + if bbox.y0 < start.y or bbox.y1 > stop.y: + continue # line above or below the selection points + lines.append(bbox) + + if lines == []: # we did not select anything + return rectangles + + lines.sort(key=lambda bbox: bbox.y0) # sort result by vertical positions + + bboxf = lines[0] # potentially cut off left part of first line + if bboxf.y0 - start.y <= 0.1 * bboxf.height: # close enough to the top? + r = Rect(start.x, bboxf.y0, bboxf.br) # intersection rectangle + if r.isEmpty or r.isInfinite: + bboxf = Rect() # first line will be skipped + else: + bboxf &= r + + if len(lines) > 1: # if we selected 2 or more lines + if not bboxf.isEmpty: + rectangles.append(bboxf) # output bbox of first line + bboxl = lines[-1] # and read last line + else: + bboxl = bboxf # further restrict the only line selected + + if stop.y - bboxl.y1 <= 0.1 * bboxl.height: # close enough to bottom? + r = Rect(bboxl.tl, stop.x, bboxl.y1) # intersection rectangle + if r.isEmpty or r.isInfinite: # last line will be skipped + bboxl = Rect() + else: + bboxl &= r + + if not bboxl.isEmpty: + rectangles.append(bboxl) + + for bbox in lines[1:-1]: # now add remaining line bboxes + rectangles.append(bbox) + + return rectangles + + +def annot_preprocess(page): + """Prepare for annotation insertion on the page. + + Returns: + Old page rotation value. Temporarily sets rotation to 0 when required. + """ + CheckParent(page) + if not page.parent.isPDF: + raise ValueError("not a PDF") + old_rotation = page.rotation + if old_rotation != 0: + page.setRotation(0) + return old_rotation + + +def annot_postprocess(page, annot): + """Clean up after annotation inertion. + + Set ownership flag and store annotation in page annotation dictionary. + """ + annot.parent = weakref.proxy(page) + page._annot_refs[id(annot)] = annot + annot.thisown = True + + +def sRGB_to_pdf(srgb): + """Convert sRGB color code to PDF color triple. + + There is **no error checking** for performance reasons! + + Args: + srgb: (int) RRGGBB (red, green, blue), each color in range(255). + Returns: + Tuple (red, green, blue) each item in intervall 0 <= item <= 1. + """ + r = srgb >> 16 + g = (srgb - (r << 16)) >> 8 + b = srgb - (r << 16) - (g << 8) + return (r / 255.0, g / 255.0, b / 255.0) + + +def make_table(rect=(0, 0, 1, 1), cols=1, rows=1): + """Return a list of (rows x cols) equal sized rectangles. + + Notes: + A utility to fill a given area with table cells of equal size. + Args: + rect: rect_like to use as the table area + rows: number of rows + cols: number of columns + Returns: + A list with items, where each item is a list of + PyMuPDF Rect objects of equal sizes. + """ + rect = Rect(rect) # ensure this is a Rect + if rect.isEmpty or rect.isInfinite: + raise ValueError("rect must be finite and not empty") + tl = rect.tl + + height = rect.height / rows # height of one table cell + width = rect.width / cols # width of one table cell + delta_h = (width, 0, width, 0) # diff to next right rect + delta_v = (0, height, 0, height) # diff to next lower rect + + r = Rect(tl, tl.x + width, tl.y + height) # first rectangle + + # make the first row + row = [r] + for i in range(1, cols): + r += delta_h # build next rect to the right + row.append(r) + + # make result, starts with first row + rects = [row] + for i in range(1, rows): + row = rects[i - 1] # take previously appended row + nrow = [] # the new row to append + for r in row: # for each previous cell add its downward copy + nrow.append(r + delta_v) + rects.append(nrow) # append new row to result + + return rects + + +def repair_mono_font(page, font): + """Repair character spacing for mono fonts. + + Notes: + Some mono-spaced fonts are displayed with a too large character + distance, e.g. "a b c" instead of "abc". This utility adds an entry + "/W[0 65532 w]" to the descendent font(s) of font. + This should enforce viewers to use 'w' as the character width. + + Args: + page: fitz.Page object. + font: fitz.Font object. + """ + if not font.flags["mono"]: + return None + doc = page.parent + fontlist = page.getFontList() # list of fonts on page + xrefs = [ # list of objects referring to font + f[0] + for f in fontlist + if (f[3] == font.name and f[4].startswith("F") and f[5].startswith("Identity")) + ] + if xrefs == []: # our font does not occur + return + xrefs = set(xrefs) # drop any double counts + width = int(font.glyph_advance(32) * 1000) + for xref in xrefs: + if not TOOLS.set_font_width(doc, xref, width): + print("Could set width for '%s' in xref %i" % (font.name, xref)) +%} diff --git a/fitz/helper-select.i b/fitz/helper-select.i new file mode 100644 index 0000000..d403a30 --- /dev/null +++ b/fitz/helper-select.i @@ -0,0 +1,374 @@ +%{ +//---------------------------------------------------------------------------- +// Helpers for document page selection - main logic was imported +// from pdf_clean_file.c. But instead of analyzing a string-based spec of +// selected pages, we accept a Python sequence. +//---------------------------------------------------------------------------- +typedef struct globals_s +{ + pdf_document *doc; + fz_context *ctx; +} globals; + +int string_in_names_list(fz_context *ctx, pdf_obj *p, pdf_obj *names_list) +{ + int n = pdf_array_len(ctx, names_list); + int i; + const char *str = pdf_to_text_string(ctx, p); + + for (i = 0; i < n ; i += 2) + { + if (!strcmp(pdf_to_text_string(ctx, pdf_array_get(ctx, names_list, i)), str)) + return 1; + } + return 0; +} + +//---------------------------------------------------------------------------- +// Recreate page tree to only retain specified pages. +//---------------------------------------------------------------------------- +void retainpage(fz_context *ctx, pdf_document *doc, pdf_obj *parent, pdf_obj *kids, int page) +{ + pdf_obj *pageref = pdf_lookup_page_obj(ctx, doc, page); + + pdf_flatten_inheritable_page_items(ctx, pageref); + + pdf_dict_put(ctx, pageref, PDF_NAME(Parent), parent); + + /* Store page object in new kids array */ + pdf_array_push(ctx, kids, pageref); +} + +int dest_is_valid_page(fz_context *ctx, pdf_obj *obj, int *page_object_nums, int pagecount) +{ + int i; + int num = pdf_to_num(ctx, obj); + + if (num == 0) + return 0; + for (i = 0; i < pagecount; i++) + { + if (page_object_nums[i] == num) + return 1; + } + return 0; +} + +int dest_is_valid(fz_context *ctx, pdf_obj *o, int page_count, int *page_object_nums, pdf_obj *names_list) +{ + pdf_obj *p; + + p = pdf_dict_get(ctx, o, PDF_NAME(A)); + if (pdf_name_eq(ctx, pdf_dict_get(ctx, p, PDF_NAME(S)), PDF_NAME(GoTo)) && + !string_in_names_list(ctx, pdf_dict_get(ctx, p, PDF_NAME(D)), names_list)) + return 0; + + p = pdf_dict_get(ctx, o, PDF_NAME(Dest)); + if (p == NULL) + {} + else if (pdf_is_string(ctx, p)) + { + return string_in_names_list(ctx, p, names_list); + } + else if (!dest_is_valid_page(ctx, pdf_array_get(ctx, p, 0), page_object_nums, page_count)) + return 0; + + return 1; +} + +int strip_outlines(fz_context *ctx, pdf_document *doc, pdf_obj *outlines, int page_count, int *page_object_nums, pdf_obj *names_list); + +int strip_outline(fz_context *ctx, pdf_document *doc, pdf_obj *outlines, int page_count, int *page_object_nums, pdf_obj *names_list, pdf_obj **pfirst, pdf_obj **plast) +{ + pdf_obj *prev = NULL; + pdf_obj *first = NULL; + pdf_obj *current; + int count = 0; + + for (current = outlines; current != NULL; ) + { + int nc; + + /*********************************************************************/ + // Strip any children to start with. This takes care of + // First / Last / Count for us. + /*********************************************************************/ + nc = strip_outlines(ctx, doc, current, page_count, page_object_nums, names_list); + + if (!dest_is_valid(ctx, current, page_count, page_object_nums, names_list)) + { + if (nc == 0) + { + /*************************************************************/ + // Outline with invalid dest and no children. Drop it by + // pulling the next one in here. + /*************************************************************/ + pdf_obj *next = pdf_dict_get(ctx, current, PDF_NAME(Next)); + if (next == NULL) + { + // There is no next one to pull in + if (prev != NULL) + pdf_dict_del(ctx, prev, PDF_NAME(Next)); + } + else if (prev != NULL) + { + pdf_dict_put(ctx, prev, PDF_NAME(Next), next); + pdf_dict_put(ctx, next, PDF_NAME(Prev), prev); + } + else + { + pdf_dict_del(ctx, next, PDF_NAME(Prev)); + } + current = next; + } + else + { + // Outline with invalid dest, but children. Just drop the dest. + pdf_dict_del(ctx, current, PDF_NAME(Dest)); + pdf_dict_del(ctx, current, PDF_NAME(A)); + current = pdf_dict_get(ctx, current, PDF_NAME(Next)); + } + } + else + { + // Keep this one + if (first == NULL) + first = current; + prev = current; + current = pdf_dict_get(ctx, current, PDF_NAME(Next)); + count++; + } + } + + *pfirst = first; + *plast = prev; + + return count; +} + +int strip_outlines(fz_context *ctx, pdf_document *doc, pdf_obj *outlines, int page_count, int *page_object_nums, pdf_obj *names_list) +{ + int nc; + pdf_obj *first; + pdf_obj *last; + + if (outlines == NULL) + return 0; + + first = pdf_dict_get(ctx, outlines, PDF_NAME(First)); + if (first == NULL) + nc = 0; + else + nc = strip_outline(ctx, doc, first, page_count, page_object_nums, + names_list, &first, &last); + + if (nc == 0) + { + pdf_dict_del(ctx, outlines, PDF_NAME(First)); + pdf_dict_del(ctx, outlines, PDF_NAME(Last)); + pdf_dict_del(ctx, outlines, PDF_NAME(Count)); + } + else + { + int old_count = pdf_to_int(ctx, pdf_dict_get(ctx, outlines, PDF_NAME(Count))); + pdf_dict_put(ctx, outlines, PDF_NAME(First), first); + pdf_dict_put(ctx, outlines, PDF_NAME(Last), last); + pdf_dict_put_drop(ctx, outlines, PDF_NAME(Count), pdf_new_int(ctx, old_count > 0 ? nc : -nc)); + } + return nc; +} + +//---------------------------------------------------------------------------- +// This is called by PyMuPDF: +// liste = page numbers to retain +//---------------------------------------------------------------------------- +void retainpages(fz_context *ctx, globals *glo, PyObject *liste) +{ + pdf_obj *oldroot, *root, *pages, *kids, *countobj, *olddests; + Py_ssize_t argc = PySequence_Size(liste); + pdf_document *doc = glo->doc; + pdf_obj *names_list = NULL; + pdf_obj *outlines; + pdf_obj *ocproperties; + int pagecount = pdf_count_pages(ctx, doc); + + int i; + int *page_object_nums; + +/******************************************************************************/ +// Keep only pages/type and (reduced) dest entries to avoid +// references to dropped pages +/******************************************************************************/ + oldroot = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME(Root)); + pages = pdf_dict_get(ctx, oldroot, PDF_NAME(Pages)); + olddests = pdf_load_name_tree(ctx, doc, PDF_NAME(Dests)); + outlines = pdf_dict_get(ctx, oldroot, PDF_NAME(Outlines)); + ocproperties = pdf_dict_get(ctx, oldroot, PDF_NAME(OCProperties)); + + root = pdf_new_dict(ctx, doc, 3); + pdf_dict_put(ctx, root, PDF_NAME(Type), pdf_dict_get(ctx, oldroot, PDF_NAME(Type))); + pdf_dict_put(ctx, root, PDF_NAME(Pages), pdf_dict_get(ctx, oldroot, PDF_NAME(Pages))); + if (outlines) + pdf_dict_put(ctx, root, PDF_NAME(Outlines), outlines); + if (ocproperties) + pdf_dict_put(ctx, root, PDF_NAME(OCProperties), ocproperties); + + pdf_update_object(ctx, doc, pdf_to_num(ctx, oldroot), root); + + // Create a new kids array with only the pages we want to keep + kids = pdf_new_array(ctx, doc, 1); + + // Retain pages specified + Py_ssize_t page; + fz_try(ctx) { + for (page = 0; page < argc; page++) { + i = (int) PyInt_AsLong(PySequence_ITEM(liste, page)); + if (i < 0 || i >= pagecount) + THROWMSG("invalid page number(s)"); + retainpage(ctx, doc, pages, kids, i); + } + } + fz_catch(ctx) { + fz_rethrow(ctx); + } + + // Update page count and kids array + countobj = pdf_new_int(ctx, pdf_array_len(ctx, kids)); + pdf_dict_put_drop(ctx, pages, PDF_NAME(Count), countobj); + pdf_dict_put_drop(ctx, pages, PDF_NAME(Kids), kids); + + pagecount = pdf_count_pages(ctx, doc); + page_object_nums = fz_calloc(ctx, pagecount, sizeof(*page_object_nums)); + for (i = 0; i < pagecount; i++) + { + pdf_obj *pageref = pdf_lookup_page_obj(ctx, doc, i); + page_object_nums[i] = pdf_to_num(ctx, pageref); + } + +/******************************************************************************/ +// If we had an old Dests tree (now reformed as an olddests dictionary), +// keep any entries in there that point to valid pages. +// This may mean we keep more than we need, but it is safe at least. +/******************************************************************************/ + if (olddests) + { + pdf_obj *names = pdf_new_dict(ctx, doc, 1); + pdf_obj *dests = pdf_new_dict(ctx, doc, 1); + int len = pdf_dict_len(ctx, olddests); + + names_list = pdf_new_array(ctx, doc, 32); + + for (i = 0; i < len; i++) + { + pdf_obj *key = pdf_dict_get_key(ctx, olddests, i); + pdf_obj *val = pdf_dict_get_val(ctx, olddests, i); + pdf_obj *dest = pdf_dict_get(ctx, val, PDF_NAME(D)); + + dest = pdf_array_get(ctx, dest ? dest : val, 0); + if (dest_is_valid_page(ctx, dest, page_object_nums, pagecount)) + { + pdf_obj *key_str = pdf_new_string(ctx, pdf_to_name(ctx, key), strlen(pdf_to_name(ctx, key))); + pdf_array_push_drop(ctx, names_list, key_str); + pdf_array_push(ctx, names_list, val); + } + } + + pdf_dict_put(ctx, dests, PDF_NAME(Names), names_list); + pdf_dict_put(ctx, names, PDF_NAME(Dests), dests); + pdf_dict_put(ctx, root, PDF_NAME(Names), names); + + pdf_drop_obj(ctx, names); + pdf_drop_obj(ctx, dests); + pdf_drop_obj(ctx, olddests); + } + +/*****************************************************************************/ +// Edit each pages /Annot list to remove any links pointing to nowhere. +/*****************************************************************************/ + for (i = 0; i < pagecount; i++) + { + pdf_obj *pageref = pdf_lookup_page_obj(ctx, doc, i); + + pdf_obj *annots = pdf_dict_get(ctx, pageref, PDF_NAME(Annots)); + + int len = pdf_array_len(ctx, annots); + int j; + + for (j = 0; j < len; j++) + { + pdf_obj *o = pdf_array_get(ctx, annots, j); + + if (!pdf_name_eq(ctx, pdf_dict_get(ctx, o, PDF_NAME(Subtype)), PDF_NAME(Link))) + continue; + + if (!dest_is_valid(ctx, o, pagecount, page_object_nums, names_list)) + { + // Remove this annotation + pdf_array_delete(ctx, annots, j); + len--; + j--; + } + } + } + + if (strip_outlines(ctx, doc, outlines, pagecount, page_object_nums, names_list) == 0) + { + pdf_dict_del(ctx, root, PDF_NAME(Outlines)); + } + + fz_free(ctx, page_object_nums); + pdf_drop_obj(ctx, names_list); + pdf_drop_obj(ctx, root); +} + +PyObject *remove_dest_range(fz_context *ctx, pdf_document *pdf, int first, int last) +{ + int i, pno, pagecount = pdf_count_pages(ctx, pdf); + if (!INRANGE(first, 0, pagecount-1) || + !INRANGE(last, 0, pagecount-1) || + (first > last)) + Py_RETURN_NONE; + fz_try(ctx) { + for (i = 0; i < pagecount; i++) { + if (INRANGE(i, first, last)) continue; + + pdf_obj *pageref = pdf_lookup_page_obj(ctx, pdf, i); + pdf_obj *annots = pdf_dict_get(ctx, pageref, PDF_NAME(Annots)); + pdf_obj *target; + if (!annots) continue; + int len = pdf_array_len(ctx, annots); + int j; + for (j = len - 1; j >= 0; j -= 1) { + pdf_obj *o = pdf_array_get(ctx, annots, j); + if (!pdf_name_eq(ctx, pdf_dict_get(ctx, o, PDF_NAME(Subtype)), PDF_NAME(Link))) + continue; + pdf_obj *action = pdf_dict_get(ctx, o, PDF_NAME(A)); + pdf_obj *dest = pdf_dict_get(ctx, o, PDF_NAME(Dest)); + if (action) { + if (!pdf_name_eq(ctx, pdf_dict_get(ctx, action, + PDF_NAME(S)), PDF_NAME(GoTo))) + continue; + dest = pdf_dict_get(ctx, action, PDF_NAME(D)); + } + pno = -1; + if (pdf_is_array(ctx, dest)) { + target = pdf_array_get(ctx, dest, 0); + pno = pdf_lookup_page_number(ctx, pdf, target); + } + else if (pdf_is_string(ctx, dest)) { + pno = pdf_lookup_anchor(ctx, pdf, + pdf_to_text_string(ctx, dest), + NULL, NULL); + } + if (INRANGE(pno, first, last)) { + pdf_array_delete(ctx, annots, j); + } + } + } + } + fz_catch(ctx) { + return NULL; + } + Py_RETURN_NONE; +} +%} diff --git a/fitz/helper-stext.i b/fitz/helper-stext.i new file mode 100644 index 0000000..9b515c6 --- /dev/null +++ b/fitz/helper-stext.i @@ -0,0 +1,581 @@ +%{ +//----------------------------------------------------------------------------- +// Make a text page directly from an fz_page +//----------------------------------------------------------------------------- +fz_stext_page *JM_new_stext_page_from_page(fz_context *ctx, fz_page *page, int flags) +{ + if (!page) return NULL; + fz_stext_page *tp = NULL; + fz_rect rect; + fz_device *dev = NULL; + fz_var(dev); + fz_var(tp); + fz_stext_options options = { 0 }; + options.flags = flags; + fz_try(ctx) { + rect = fz_bound_page(ctx, page); + tp = fz_new_stext_page(ctx, rect); + dev = fz_new_stext_device(ctx, tp, &options); + fz_run_page_contents(ctx, page, dev, fz_identity, NULL); + fz_close_device(ctx, dev); + } + fz_always(ctx) { + fz_drop_device(ctx, dev); + } + fz_catch(ctx) { + fz_drop_stext_page(ctx, tp); + fz_rethrow(ctx); + } + return tp; +} + + +//----------------------------------------------------------------------------- +// Replace MuPDF error rune with character 0xB7 +//----------------------------------------------------------------------------- +PyObject *JM_repl_char() +{ + const char data[2] = {194, 183}; + return PyUnicode_FromStringAndSize(data, 2); +} + +//----------------------------------------------------------------------------- +// APPEND non-ascii runes in unicode escape format to a fz_buffer +//----------------------------------------------------------------------------- +void JM_append_rune(fz_context *ctx, fz_buffer *buff, int ch) +{ + if (ch >= 32 && ch <= 127) + { + fz_append_byte(ctx, buff, ch); + } + else if (ch <= 0xffff) // 4 hex digits + { + fz_append_printf(ctx, buff, "\\u%04x", ch); + } + else // 8 hex digits + { + fz_append_printf(ctx, buff, "\\U%08x", ch); + } +} + + +//----------------------------------------------------------------------------- +// WRITE non-ascii runes in unicode escape format to a fz_output +//----------------------------------------------------------------------------- +void JM_write_rune(fz_context *ctx, fz_output *out, int ch) +{ + if (ch >= 32 && ch <= 127) + { + fz_write_byte(ctx, out, ch); + } + else if (ch <= 0xffff) // 4 hex digits + { + fz_write_printf(ctx, out, "\\u%04x", ch); + } + else // 8 hex digits + { + fz_write_printf(ctx, out, "\\U%08x", ch); + } +} + + +//----------------------------------------------------------------------------- +// Plain text output. An identical copy of fz_print_stext_page_as_text, +// but lines within a block are concatenated by space instead a new-line +// character (which else leads to 2 new-lines). +//----------------------------------------------------------------------------- +void +JM_print_stext_page_as_text(fz_context *ctx, fz_output *out, fz_stext_page *page) +{ + fz_stext_block *block = NULL; + fz_stext_line *line = NULL; + fz_stext_char *ch = NULL; + int last_char = 0; + + for (block = page->first_block; block; block = block->next) + { + if (block->type == FZ_STEXT_BLOCK_TEXT) + { + int line_n = 0; + for (line = block->u.t.first_line; line; line = line->next) + { + if (line_n > 0 && last_char != 10) + { + fz_write_string(ctx, out, "\n"); + } + line_n++; + for (ch = line->first_char; ch; ch = ch->next) + { + JM_write_rune(ctx, out, ch->c); + last_char = ch->c; + } + } + fz_write_string(ctx, out, "\n"); + } + } +} + +//----------------------------------------------------------------------------- +// Functions for wordlist output +//----------------------------------------------------------------------------- +int JM_append_word(fz_context *ctx, PyObject *lines, fz_buffer *buff, fz_rect *wbbox, + int block_n, int line_n, int word_n) +{ + PyObject *s = JM_EscapeStrFromBuffer(ctx, buff); + PyObject *litem = Py_BuildValue("ffffOiii", + wbbox->x0, + wbbox->y0, + wbbox->x1, + wbbox->y1, + s, + block_n, line_n, word_n); + LIST_APPEND_DROP(lines, litem); + Py_DECREF(s); + wbbox->x0 = wbbox->y0 = wbbox->x1 = wbbox->y1 = 0; + return word_n + 1; // word counter +} + +//----------------------------------------------------------------------------- +// Functions for dictionary output +//----------------------------------------------------------------------------- + +// create the char rect from its quad +fz_rect JM_char_bbox(fz_stext_line *line, fz_stext_char *ch) +{ + fz_rect r = fz_rect_from_quad(ch->quad); + if (!fz_is_empty_rect(r)) return r; + // we need to correct erroneous font! + if ((r.y1 - r.y0) <= FLT_EPSILON) r.y0 = r.y1 - ch->size; + if ((r.x1 - r.x0) <= FLT_EPSILON) r.x0 = r.x1 - ch->size; + return r; +} + +static int detect_super_script(fz_stext_line *line, fz_stext_char *ch) +{ + if (line->wmode == 0 && line->dir.x == 1 && line->dir.y == 0) + return ch->origin.y < line->first_char->origin.y - ch->size * 0.1f; + return 0; +} + +static int JM_char_font_flags(fz_context *ctx, fz_font *font, fz_stext_line *line, fz_stext_char *ch) +{ + int flags = detect_super_script(line, ch); + flags += fz_font_is_italic(ctx, font) * TEXT_FONT_ITALIC; + flags += fz_font_is_serif(ctx, font) * TEXT_FONT_SERIFED; + flags += fz_font_is_monospaced(ctx, font) * TEXT_FONT_MONOSPACED; + flags += fz_font_is_bold(ctx, font) * TEXT_FONT_BOLD; + return flags; +} + + +static PyObject *JM_make_spanlist(fz_context *ctx, fz_stext_line *line, int raw, fz_buffer *buff) +{ + PyObject *span = NULL, *char_list = NULL, *char_dict; + PyObject *span_list = PyList_New(0); + fz_clear_buffer(ctx, buff); + fz_stext_char *ch; + fz_rect span_rect; + typedef struct style_s + {float size; int flags; char *font; int color;} char_style; + + char_style old_style = { -1, -1, "", -1 }, style; + + for (ch = line->first_char; ch; ch = ch->next) + { + fz_rect r = JM_char_bbox(line, ch); + int flags = JM_char_font_flags(ctx, ch->font, line, ch); + style.size = ch->size; + style.flags = flags; + style.font = (char *) fz_font_name(ctx, ch->font); + style.color = ch->color; + + if (style.size != old_style.size || + style.flags != old_style.flags || + style.color != old_style.color || + strcmp(style.font, old_style.font) != 0) // changed -> new span + { + if (old_style.size >= 0) // not 1st one, output previous span + { + if (raw) // put character list in the span + { + DICT_SETITEM_DROP(span, dictkey_chars, char_list); + char_list = NULL; + } + else // put text string in the span + { + DICT_SETITEM_DROP(span, dictkey_text, JM_EscapeStrFromBuffer(ctx, buff)); + fz_clear_buffer(ctx, buff); + } + + DICT_SETITEM_DROP(span, dictkey_bbox, JM_py_from_rect(span_rect)); + + LIST_APPEND_DROP(span_list, span); + span = NULL; + } + + span = PyDict_New(); + + DICT_SETITEM_DROP(span, dictkey_size, Py_BuildValue("f", style.size)); + DICT_SETITEM_DROP(span, dictkey_flags, Py_BuildValue("i", style.flags)); + DICT_SETITEM_DROP(span, dictkey_font, JM_EscapeStrFromStr(style.font)); + DICT_SETITEM_DROP(span, dictkey_color, Py_BuildValue("i", style.color)); + + old_style = style; + span_rect = r; + } + span_rect = fz_union_rect(span_rect, r); + if (raw) // make and append a char dict + { + char_dict = PyDict_New(); + + DICT_SETITEM_DROP(char_dict, dictkey_origin, + Py_BuildValue("ff", ch->origin.x, ch->origin.y)); + + DICT_SETITEM_DROP(char_dict, dictkey_bbox, + Py_BuildValue("ffff", r.x0, r.y0, r.x1, r.y1)); + + DICT_SETITEM_DROP(char_dict, dictkey_c, + Py_BuildValue("C", ch->c)); + + if (!char_list) + { + char_list = PyList_New(0); + } + LIST_APPEND_DROP(char_list, char_dict); + } + else // add character byte to buffer + { + JM_append_rune(ctx, buff, ch->c); + } + } + // all characters processed, now flush remaining span + if (span) + { + if (raw) + { + DICT_SETITEM_DROP(span, dictkey_chars, char_list); + char_list = NULL; + } + else + { + DICT_SETITEM_DROP(span, dictkey_text, JM_EscapeStrFromBuffer(ctx, buff)); + fz_clear_buffer(ctx, buff); + } + DICT_SETITEM_DROP(span, dictkey_bbox, JM_py_from_rect(span_rect)); + + LIST_APPEND_DROP(span_list, span); + span = NULL; + } + return span_list; +} + +static void JM_make_image_block(fz_context *ctx, fz_stext_block *block, PyObject *block_dict) +{ + fz_image *image = block->u.i.image; + fz_buffer *buf = NULL, *freebuf = NULL; + fz_compressed_buffer *buffer = fz_compressed_image_buffer(ctx, image); + fz_var(buf); + fz_var(freebuf); + int n = fz_colorspace_n(ctx, image->colorspace); + int w = image->w; + int h = image->h; + const char *ext = NULL; + int type = FZ_IMAGE_UNKNOWN; + if (buffer) + type = buffer->params.type; + if (type < FZ_IMAGE_BMP || type == FZ_IMAGE_JBIG2) + type = FZ_IMAGE_UNKNOWN; + PyObject *bytes = NULL; + fz_var(bytes); + fz_try(ctx) { + if (buffer && type != FZ_IMAGE_UNKNOWN) { + buf = buffer->buffer; + ext = JM_image_extension(type); + } + else { + buf = freebuf = fz_new_buffer_from_image_as_png(ctx, image, fz_default_color_params); + ext = "png"; + } + if (PY_MAJOR_VERSION > 2) { + bytes = JM_BinFromBuffer(ctx, buf); + } + else { + bytes = JM_BArrayFromBuffer(ctx, buf); + } + } + fz_always(ctx) { + if (!bytes) + bytes = JM_BinFromChar(""); + DICT_SETITEM_DROP(block_dict, dictkey_width, + Py_BuildValue("i", w)); + DICT_SETITEM_DROP(block_dict, dictkey_height, + Py_BuildValue("i", h)); + DICT_SETITEM_DROP(block_dict, dictkey_ext, + Py_BuildValue("s", ext)); + DICT_SETITEM_DROP(block_dict, dictkey_colorspace, + Py_BuildValue("i", n)); + DICT_SETITEM_DROP(block_dict, dictkey_xres, + Py_BuildValue("i", image->xres)); + DICT_SETITEM_DROP(block_dict, dictkey_yres, + Py_BuildValue("i", image->xres)); + DICT_SETITEM_DROP(block_dict, dictkey_bpc, + Py_BuildValue("i", (int) image->bpc)); + DICT_SETITEM_DROP(block_dict, dictkey_image, bytes); + + fz_drop_buffer(ctx, freebuf); + } + fz_catch(ctx) {;} + return; +} + +static void JM_make_text_block(fz_context *ctx, fz_stext_block *block, PyObject *block_dict, int raw, fz_buffer *buff) +{ + fz_stext_line *line; + PyObject *line_list = PyList_New(0), *line_dict; + + for (line = block->u.t.first_line; line; line = line->next) + { + line_dict = PyDict_New(); + + DICT_SETITEM_DROP(line_dict, dictkey_wmode, + Py_BuildValue("i", line->wmode)); + DICT_SETITEM_DROP(line_dict, dictkey_dir, + Py_BuildValue("ff", line->dir.x, line->dir.y)); + DICT_SETITEM_DROP(line_dict, dictkey_bbox, + JM_py_from_rect(line->bbox)); + DICT_SETITEM_DROP(line_dict, dictkey_spans, + JM_make_spanlist(ctx, line, raw, buff)); + + LIST_APPEND_DROP(line_list, line_dict); + } + DICT_SETITEM_DROP(block_dict, dictkey_lines, line_list); + return; +} + +void JM_make_textpage_dict(fz_context *ctx, fz_stext_page *tp, PyObject *page_dict, int raw) +{ + fz_stext_block *block; + fz_buffer *text_buffer = fz_new_buffer(ctx, 64); + PyObject *block_dict, *block_list = PyList_New(0); + for (block = tp->first_block; block; block = block->next) + { + block_dict = PyDict_New(); + + DICT_SETITEM_DROP(block_dict, dictkey_type, Py_BuildValue("i", block->type)); + DICT_SETITEM_DROP(block_dict, dictkey_bbox, JM_py_from_rect(block->bbox)); + + if (block->type == FZ_STEXT_BLOCK_IMAGE) + { + JM_make_image_block(ctx, block, block_dict); + } + else + { + JM_make_text_block(ctx, block, block_dict, raw, text_buffer); + } + + LIST_APPEND_DROP(block_list, block_dict); + } + DICT_SETITEM_DROP(page_dict, dictkey_blocks, block_list); + fz_drop_buffer(ctx, text_buffer); +} + + +fz_buffer *JM_object_to_buffer(fz_context *ctx, pdf_obj *what, int compress, int ascii) +{ + fz_buffer *res=NULL; + fz_output *out=NULL; + fz_try(ctx) { + res = fz_new_buffer(ctx, 1024); + out = fz_new_output_with_buffer(ctx, res); + pdf_print_obj(ctx, out, what, compress, ascii); + } + fz_always(ctx) { + fz_drop_output(ctx, out); + } + fz_catch(ctx) { + return NULL; + } + fz_terminate_buffer(gctx, res); + return res; +} + +//----------------------------------------------------------------------------- +// Merge the /Resources object created by a text pdf device into the page. +// The device may have created multiple /ExtGState/Alp? and /Font/F? objects. +// These need to be renamed (renumbered) to not overwrite existing page +// objects from previous executions. +// Returns the next available numbers n, m for objects /Alp, /F. +//----------------------------------------------------------------------------- +PyObject *JM_merge_resources(fz_context *ctx, pdf_page *page, pdf_obj *temp_res) +{ + // page objects /Resources, /Resources/ExtGState, /Resources/Font + pdf_obj *resources = pdf_dict_get(ctx, page->obj, PDF_NAME(Resources)); + pdf_obj *main_extg = pdf_dict_get(ctx, resources, PDF_NAME(ExtGState)); + pdf_obj *main_fonts = pdf_dict_get(ctx, resources, PDF_NAME(Font)); + + // text pdf device objects /ExtGState, /Font + pdf_obj *temp_extg = pdf_dict_get(ctx, temp_res, PDF_NAME(ExtGState)); + pdf_obj *temp_fonts = pdf_dict_get(ctx, temp_res, PDF_NAME(Font)); + + int max_alp = 0, max_fonts = 0, i, n; + char start_str[32] = {0}; // string for comparison + char text[32] = {0}; // string for comparison + + // Handle /Alp objects + if (pdf_is_dict(ctx, temp_extg)) // any created at all? + { + n = pdf_dict_len(ctx, temp_extg); + if (pdf_is_dict(ctx, main_extg)) // does page have /ExtGState yet? + { + for (i = 0; i < pdf_dict_len(ctx, main_extg); i++) + { // get highest number of objects named /Alp? + char *alp = (char *) pdf_to_name(ctx, pdf_dict_get_key(ctx, main_extg, i)); + if (strncmp(alp, "Alp", 3) != 0) continue; + if (strcmp(start_str, alp) < 0) strcpy(start_str, alp); + } + while (strcmp(text, start_str) < 0) + { // compute next available number + fz_snprintf(text, sizeof(text), "Alp%d", max_alp); + max_alp++; + } + } + else // create a /ExtGState for the page + main_extg = pdf_dict_put_dict(ctx, resources, PDF_NAME(ExtGState), n); + + for (i = 0; i < n; i++) // copy over renumbered /Alp objects + { + fz_snprintf(text, sizeof(text), "Alp%d", i + max_alp); // new name + pdf_obj *val = pdf_dict_get_val(ctx, temp_extg, i); + pdf_dict_puts(ctx, main_extg, text, val); + } + } + + text[0] = 0; // empty comparison string + start_str[0] = 0; // empty comparison string + + if (pdf_is_dict(ctx, main_fonts)) // has page any fonts yet? + { + for (i = 0; i < pdf_dict_len(ctx, main_fonts); i++) + { // get highest number of fonts named /Fxxx + char *font = (char *) pdf_to_name(ctx, pdf_dict_get_key(ctx, main_fonts, i)); + if (strncmp(font, "F", 1) != 0) continue; + if (strcmp(start_str, font) < 0 || strlen(start_str) < strlen(font)) + strcpy(start_str, font); + } + while (strcmp(text, start_str) < 0) + { // compute next available number + fz_snprintf(text, sizeof(text), "F%d", max_fonts); + max_fonts++; + } + } + else // create a Resources/Font for the page + main_fonts = pdf_dict_put_dict(ctx, resources, PDF_NAME(Font), 2); + + for (i = 0; i < pdf_dict_len(ctx, temp_fonts); i++) + { // copy over renumbered font objects + fz_snprintf(text, sizeof(text), "F%d", i + max_fonts); + pdf_obj *val = pdf_dict_get_val(ctx, temp_fonts, i); + pdf_dict_puts(ctx, main_fonts, text, val); + } + return Py_BuildValue("ii", max_alp, max_fonts); // next available numbers +} + + +//----------------------------------------------------------------------------- +// version of fz_show_string, which also covers UCDN script +//----------------------------------------------------------------------------- +fz_matrix JM_show_string(fz_context *ctx, fz_text *text, fz_font *user_font, fz_matrix trm, const char *s, int wmode, int bidi_level, fz_bidi_direction markup_dir, fz_text_language language, int script) +{ + fz_font *font; + int gid, ucs; + float adv; + + while (*s) + { + s += fz_chartorune(&ucs, s); + gid = fz_encode_character_with_fallback(ctx, user_font, ucs, script, language, &font); + fz_show_glyph(ctx, text, font, trm, gid, ucs, wmode, bidi_level, markup_dir, language); + adv = fz_advance_glyph(ctx, font, gid, wmode); + if (wmode == 0) + trm = fz_pre_translate(trm, adv, 0); + else + trm = fz_pre_translate(trm, 0, -adv); + } + + return trm; +} + + +//----------------------------------------------------------------------------- +// return a fz_font from a number of parameters +//----------------------------------------------------------------------------- +fz_font *JM_get_font(fz_context *ctx, + char *fontname, + char *fontfile, + PyObject *fontbuffer, + int script, + int lang, + int ordering, + int is_bold, + int is_italic, + int is_serif) +{ + const unsigned char *data = NULL; + int size, index=0; + fz_buffer *res = NULL; + fz_font *font = NULL; + fz_try(ctx) { + if (fontfile) goto have_file; + if (EXISTS(fontbuffer)) goto have_buffer; + if (ordering > -1) goto have_cjk; + if (fontname) goto have_base14; + goto have_noto; + + // Base-14 font + have_base14:; + data = fz_lookup_base14_font(ctx, fontname, &size); + if (data) font = fz_new_font_from_memory(ctx, fontname, data, size, 0, 0); + if(font) goto fertig; + + data = fz_lookup_builtin_font(gctx, fontname, is_bold, is_italic, &size); + if (data) font = fz_new_font_from_memory(ctx, fontname, data, size, 0, 0); + goto fertig; + + // CJK font + have_cjk:; + data = fz_lookup_cjk_font(ctx, ordering, &size, &index); + if (data) font = fz_new_font_from_memory(ctx, NULL, data, size, index, 0); + goto fertig; + + // fontfile + have_file:; + font = fz_new_font_from_file(ctx, NULL, fontfile, index, 0); + goto fertig; + + // fontbuffer + have_buffer:; + res = JM_BufferFromBytes(ctx, fontbuffer); + font = fz_new_font_from_buffer(ctx, NULL, res, index, 0); + goto fertig; + + // Check for NOTO font + have_noto:; + data = fz_lookup_noto_font(ctx, script, lang, &size, &index); + if (data) font = fz_new_font_from_memory(ctx, NULL, data, size, index, 0); + if (font) goto fertig; + font = fz_load_fallback_font(ctx, script, lang, is_serif, is_bold, is_italic); + goto fertig; + + fertig:; + if (!font) THROWMSG("could not find a matching font"); + } + fz_always(ctx) { + fz_drop_buffer(ctx, res); + } + fz_catch(ctx) { + fz_rethrow(ctx); + } + return font; +} + +%} diff --git a/fitz/helper-xobject.i b/fitz/helper-xobject.i new file mode 100644 index 0000000..902d1de --- /dev/null +++ b/fitz/helper-xobject.i @@ -0,0 +1,217 @@ +%{ +//----------------------------------------------------------------------------- +// Read and concatenate a PDF page's /Conents object(s) in a buffer +//----------------------------------------------------------------------------- +fz_buffer *JM_read_contents(fz_context * ctx, pdf_obj * pageref) +{ + fz_buffer *res = NULL, *nres = NULL; + int i; + fz_try(ctx) { + pdf_obj *contents = pdf_dict_get(ctx, pageref, PDF_NAME(Contents)); + if (pdf_is_array(ctx, contents)) { + res = fz_new_buffer(ctx, 1024); + for (i = 0; i < pdf_array_len(ctx, contents); i++) { + nres = pdf_load_stream(ctx, pdf_array_get(ctx, contents, i)); + fz_append_buffer(ctx, res, nres); + fz_drop_buffer(ctx, nres); + } + } + else if (contents) { + res = pdf_load_stream(ctx, contents); + } + } + fz_catch(ctx) { + fz_rethrow(ctx); + } + return res; +} + +//----------------------------------------------------------------------------- +// Make an XObject from a PDF page +// For a positive xref assume that that object can be used instead +//----------------------------------------------------------------------------- +pdf_obj *JM_xobject_from_page(fz_context * ctx, pdf_document * pdfout, fz_page * fsrcpage, int xref, pdf_graft_map *gmap) +{ + fz_buffer *res = NULL; + pdf_obj *xobj1, *resources = NULL, *o, *spageref; + fz_rect mediabox; + + fz_try(ctx) { + pdf_page *srcpage = pdf_page_from_fz_page(ctx, fsrcpage); + spageref = srcpage->obj; + mediabox = pdf_to_rect(ctx, pdf_dict_get_inheritable(ctx, spageref, PDF_NAME(MediaBox))); + + if (xref > 0) { + xobj1 = pdf_new_indirect(ctx, pdfout, xref, 0); + } + else { + // Deep-copy resources object of source page + o = pdf_dict_get_inheritable(ctx, spageref, PDF_NAME(Resources)); + if (gmap) // use graftmap when possible + resources = pdf_graft_mapped_object(ctx, gmap, o); + else + resources = pdf_graft_object(ctx, pdfout, o); + + // get spgage contents source + res = JM_read_contents(ctx, spageref); + + //------------------------------------------------------------- + // create XObject representing the source page + //------------------------------------------------------------- + xobj1 = pdf_new_xobject(ctx, pdfout, mediabox, fz_identity, NULL, res); + // store spage contents + JM_update_stream(ctx, pdfout, xobj1, res, 1); + fz_drop_buffer(ctx, res); + + // store spage resources + pdf_dict_put_drop(ctx, xobj1, PDF_NAME(Resources), resources); + } + } + fz_catch(ctx) { + fz_rethrow(ctx); + } + return xobj1; +} + +//----------------------------------------------------------------------------- +// Insert a buffer as a new separate /Contents object of a page. +// 1. Create a new stream object from buffer 'newcont' +// 2. If /Contents already is an array, then just prepend or append this object +// 3. Else, create new array and put old content obj and this object into it. +// If the page had no /Contents before, just create a 1-item array. +//----------------------------------------------------------------------------- +int JM_insert_contents(fz_context * ctx, pdf_document * pdf, + pdf_obj * pageref, fz_buffer * newcont, int overlay) +{ + int xref = 0; + fz_try(ctx) { + pdf_obj *contents = pdf_dict_get(ctx, pageref, PDF_NAME(Contents)); + pdf_obj *newconts = pdf_add_stream(ctx, pdf, newcont, NULL, 0); + xref = pdf_to_num(ctx, newconts); + if (pdf_is_array(ctx, contents)) { + if (overlay) // append new object + pdf_array_push(ctx, contents, newconts); + else // prepend new object + pdf_array_insert(ctx, contents, newconts, 0); + } + else { + pdf_obj *carr = pdf_new_array(ctx, pdf, 5); + if (overlay) { + if (contents) + pdf_array_push(ctx, carr, contents); + pdf_array_push(ctx, carr, newconts); + } + else { + pdf_array_push_drop(ctx, carr, newconts); + if (contents) + pdf_array_push(ctx, carr, contents); + } + pdf_dict_put(ctx, pageref, PDF_NAME(Contents), carr); + } + } + fz_catch(ctx) { + fz_rethrow(ctx); + } + return xref; +} + +static PyObject *img_info = NULL; + +static fz_image * +JM_image_filter(fz_context * ctx, void *opaque, fz_matrix ctm, const char *name, fz_image *image) +{ + fz_quad q = fz_transform_quad(fz_quad_from_rect(fz_unit_rect), ctm); + PyObject *q_py = JM_py_from_quad(q); + PyList_Append(img_info, Py_BuildValue("sO", name, q_py)); + Py_DECREF(q_py); + return NULL; +} + +void +JM_filter_content_stream( + fz_context * ctx, + pdf_document * doc, + pdf_obj * in_stm, + pdf_obj * in_res, + fz_matrix transform, + pdf_filter_options * filter, + int struct_parents, + fz_buffer **out_buf, + pdf_obj **out_res) +{ + pdf_processor *proc_buffer = NULL; + pdf_processor *proc_filter = NULL; + + fz_var(proc_buffer); + fz_var(proc_filter); + + *out_buf = NULL; + *out_res = NULL; + + fz_try(ctx) { + *out_buf = fz_new_buffer(ctx, 1024); + proc_buffer = pdf_new_buffer_processor(ctx, *out_buf, filter->ascii); + if (filter->sanitize) { + *out_res = pdf_new_dict(ctx, doc, 1); + proc_filter = pdf_new_filter_processor(ctx, doc, proc_buffer, in_res, *out_res, struct_parents, transform, filter); + pdf_process_contents(ctx, proc_filter, doc, in_res, in_stm, NULL); + pdf_close_processor(ctx, proc_filter); + } + else { + *out_res = pdf_keep_obj(ctx, in_res); + pdf_process_contents(ctx, proc_buffer, doc, in_res, in_stm, NULL); + } + pdf_close_processor(ctx, proc_buffer); + } + fz_always(ctx) { + pdf_drop_processor(ctx, proc_filter); + pdf_drop_processor(ctx, proc_buffer); + } + fz_catch(ctx) { + fz_drop_buffer(ctx, *out_buf); + *out_buf = NULL; + pdf_drop_obj(ctx, *out_res); + *out_res = NULL; + fz_rethrow(ctx); + } +} + +PyObject * +JM_image_reporter(fz_context *ctx, pdf_page *page) +{ + pdf_document *doc = page->doc; + pdf_filter_options filter; + memset(&filter, 0, sizeof filter); + filter.opaque = page; + filter.text_filter = NULL; + filter.image_filter = JM_image_filter; + filter.end_page = NULL; + filter.recurse = 0; + filter.instance_forms = 1; + filter.sanitize = 1; + filter.ascii = 1; + + pdf_obj *contents, *old_res; + pdf_obj *struct_parents_obj; + pdf_obj *new_res; + fz_buffer *buffer; + int struct_parents; + + struct_parents_obj = pdf_dict_get(ctx, page->obj, PDF_NAME(StructParents)); + struct_parents = -1; + if (pdf_is_number(ctx, struct_parents_obj)) + struct_parents = pdf_to_int(ctx, struct_parents_obj); + + contents = pdf_page_contents(ctx, page); + old_res = pdf_page_resources(ctx, page); + img_info = PyList_New(0); + JM_filter_content_stream(ctx, doc, contents, old_res, fz_identity, &filter, struct_parents, &buffer, &new_res); + fz_drop_buffer(ctx, buffer); + pdf_drop_obj(ctx, new_res); + PyObject *rc = PySequence_Tuple(img_info); + Py_DECREF(img_info); + img_info = NULL; + return rc; +} + +%} diff --git a/fitz/utils.py b/fitz/utils.py new file mode 100644 index 0000000..8ec031f --- /dev/null +++ b/fitz/utils.py @@ -0,0 +1,3601 @@ +from __future__ import division + +import io +import math +import os +import warnings + +from fitz import * + + +""" +This is a collection of functions to extend PyMupdf. +""" + + +def writeText( + page, + rect=None, + writers=None, + opacity=None, + color=None, + overlay=True, + keep_proportion=True, + rotate=0, +): + """Write the text of one or TextWriter objects. + + Args: + rect: target rectangle. If None, the union of the text writers is used. + writers: one or more TextWriter objects. + overlay: put in foreground or background. + keep_proportion: maintain aspect ratio of rectangle sides. + rotate: arbitrary rotation angle. + """ + if not writers: + raise ValueError("specify at least one TextWriter") + if type(writers) is TextWriter: + if rotate == 0 and rect is None: + writers.writeText(page, opacity=opacity, color=color, overlay=overlay) + return None + else: + writers = (writers,) + clip = writers[0].textRect + textdoc = Document() + tpage = textdoc.newPage(width=page.rect.width, height=page.rect.height) + for writer in writers: + clip |= writer.textRect + writer.writeText(tpage, opacity=opacity, color=color) + if rect is None: + rect = clip + page.showPDFpage( + rect, + textdoc, + 0, + overlay=overlay, + keep_proportion=keep_proportion, + rotate=rotate, + clip=clip, + ) + textdoc = None + tpage = None + + +def showPDFpage( + page, + rect, + src, + pno=0, + overlay=True, + keep_proportion=True, + rotate=0, + reuse_xref=0, + clip=None, +): + """Show page number 'pno' of PDF 'src' in rectangle 'rect'. + + Args: + rect: (rect-like) where to place the source image + src: (document) source PDF + pno: (int) source page number + overlay: (bool) put in foreground + keep_proportion: (bool) do not change width-height-ratio + rotate: (int) degrees (multiple of 90) + clip: (rect-like) part of source page rectangle + Returns: + xref of inserted object (for reuse) + """ + + def calc_matrix(sr, tr, keep=True, rotate=0): + """ Calculate transformation matrix from source to target rect. + + Notes: + The product of four matrices in this sequence: (1) translate correct + source corner to origin, (2) rotate, (3) scale, (4) translate to + target's top-left corner. + Args: + sr: source rect in PDF (!) coordinate system + tr: target rect in PDF coordinate system + keep: whether to keep source ratio of width to height + rotate: rotation angle in degrees + Returns: + Transformation matrix. + """ + # calc center point of source rect + smp = Point((sr.x1 + sr.x0) / 2.0, (sr.y1 + sr.y0) / 2.0) + # calc center point of target rect + tmp = Point((tr.x1 + tr.x0) / 2.0, (tr.y1 + tr.y0) / 2.0) + + rot = Matrix(rotate) # rotation matrix + + # m moves to (0, 0), then rotates + m = Matrix(1, 0, 0, 1, -smp.x, -smp.y) * rot + + sr1 = sr * m # resulting source rect to calculate scale factors + + fw = tr.width / sr1.width # scale the width + fh = tr.height / sr1.height # scale the height + if keep: + fw = fh = min(fw, fh) # take min if keeping aspect ratio + + m *= Matrix(fw, fh) # concat scale matrix + m *= Matrix(1, 0, 0, 1, tmp.x, tmp.y) # concat move to target center + return JM_TUPLE(m) + + CheckParent(page) + doc = page.parent + + if not doc.isPDF or not src.isPDF: + raise ValueError("not a PDF") + + rect = page.rect & rect # intersect with page rectangle + if rect.isEmpty or rect.isInfinite: + raise ValueError("rect must be finite and not empty") + + if reuse_xref > 0: + warnings.warn("ignoring 'reuse_xref'", DeprecationWarning) + + while pno < 0: # support negative page numbers + pno += len(src) + src_page = src[pno] # load ource page + if len(src_page._getContents()) == 0: + raise ValueError("nothing to show - source page empty") + + tar_rect = rect * ~page.transformationMatrix # target rect in PDF coordinates + + src_rect = src_page.rect if not clip else src_page.rect & clip # source rect + if src_rect.isEmpty or src_rect.isInfinite: + raise ValueError("clip must be finite and not empty") + src_rect = src_rect * ~src_page.transformationMatrix # ... in PDF coord + + matrix = calc_matrix(src_rect, tar_rect, keep=keep_proportion, rotate=rotate) + + # list of existing /Form /XObjects + ilst = [i[1] for i in doc._getPageInfo(page.number, 3)] + + # create a name not in that list + n = "fzFrm" + i = 0 + _imgname = n + "0" + while _imgname in ilst: + i += 1 + _imgname = n + str(i) + + isrc = src._graft_id # used as key for graftmaps + if doc._graft_id == isrc: + raise ValueError("source document must not equal target") + + # check if we have already copied objects from this source doc + if isrc in doc.Graftmaps: # yes: use the old graftmap + gmap = doc.Graftmaps[isrc] + else: # no: make a new graftmap + gmap = Graftmap(doc) + doc.Graftmaps[isrc] = gmap + + # take note of generated xref for automatic reuse + pno_id = (isrc, pno) # id of src[pno] + xref = doc.ShownPages.get(pno_id, 0) + + xref = page._showPDFpage( + src_page, + overlay=overlay, + matrix=matrix, + xref=xref, + clip=src_rect, + graftmap=gmap, + _imgname=_imgname, + ) + doc.ShownPages[pno_id] = xref + + return xref + + +def insertImage( + page, + rect, + filename=None, + pixmap=None, + stream=None, + rotate=0, + keep_proportion=True, + overlay=True, +): + """Insert an image in a rectangle on the current page. + + Notes: + Exactly one of filename, pixmap or stream must be provided. + Args: + rect: (rect-like) where to place the source image + filename: (str) name of an image file + pixmap: (obj) a Pixmap object + stream: (bytes) an image in memory + rotate: (int) degrees (multiple of 90) + keep_proportion: (bool) whether to maintain aspect ratio + overlay: (bool) put in foreground + """ + + def calc_matrix(fw, fh, tr, rotate=0): + """ Calculate transformation matrix for image insertion. + + Notes: + The image will preserve its aspect ratio if and only if arguments + fw, fh are both equal to 1. + Args: + fw, fh: width / height ratio factors of image - floats in (0,1]. + At least one of them (corresponding to the longer side) is equal to 1. + tr: target rect in PDF coordinates + rotate: rotation angle in degrees + Returns: + Transformation matrix. + """ + # center point of target rect + tmp = Point((tr.x1 + tr.x0) / 2.0, (tr.y1 + tr.y0) / 2.0) + + rot = Matrix(rotate) # rotation matrix + + # matrix m moves image center to (0, 0), then rotates + m = Matrix(1, 0, 0, 1, -0.5, -0.5) * rot + + # sr1 = sr * m # resulting image rect + + # -------------------------------------------------------------------- + # calculate the scale matrix + # -------------------------------------------------------------------- + small = min(fw, fh) # factor of the smaller side + + if rotate not in (0, 180): + fw, fh = fh, fw # width / height exchange their roles + + if fw < 1: # portrait + if tr.width / fw > tr.height / fh: + w = tr.height * small + h = tr.height + else: + w = tr.width + h = tr.width / small + + elif fw != fh: # landscape + if tr.width / fw > tr.height / fh: + w = tr.height / small + h = tr.height + else: + w = tr.width + h = tr.width * small + + else: # (treated as) equal sided + w = tr.width + h = tr.height + + m *= Matrix(w, h) # concat scale matrix + + m *= Matrix(1, 0, 0, 1, tmp.x, tmp.y) # concat move to target center + + return m + + # ------------------------------------------------------------------------- + + CheckParent(page) + doc = page.parent + if not doc.isPDF: + raise ValueError("not a PDF") + if bool(filename) + bool(stream) + bool(pixmap) != 1: + raise ValueError("need exactly one of filename, pixmap, stream") + + if filename and not os.path.exists(filename): + raise FileNotFoundError("No such file: '%s'" % filename) + elif stream and type(stream) not in (bytes, bytearray, io.BytesIO): + raise ValueError("stream must be bytes-like or BytesIO") + elif pixmap and type(pixmap) is not Pixmap: + raise ValueError("pixmap must be a Pixmap") + + while rotate < 0: + rotate += 360 + while rotate >= 360: + rotate -= 360 + if rotate not in (0, 90, 180, 270): + raise ValueError("bad rotate value") + + r = page.CropBox & rect + if r.isEmpty or r.isInfinite: + raise ValueError("rect must be finite and not empty") + + _imgpointer = None + + # ------------------------------------------------------------------------- + # Calculate the matrix for image insertion. + # ------------------------------------------------------------------------- + # If aspect ratio must be kept, we need to know image width and height. + # Easy for pixmaps. For file and stream cases, we make an fz_image and + # take those values from it. In this case, we also hand the fz_image over + # to the actual C-level function (_imgpointer), and set all other + # parameters to None. + # ------------------------------------------------------------------------- + if keep_proportion is True: # for this we need the image dimension + if pixmap: # this is the easy case + w = pixmap.width + h = pixmap.height + + elif stream: # use tool to access the information + # we also pass through the generated fz_image address + if type(stream) is io.BytesIO: + stream = stream.getvalue() + img_prof = TOOLS.image_profile(stream, keep_image=True) + w, h = img_prof["width"], img_prof["height"] + stream = None # make sure this arg is NOT used + _imgpointer = img_prof["image"] # pointer to fz_image + + else: # worst case: must read the file + stream = open(filename, "rb").read() + img_prof = TOOLS.image_profile(stream, keep_image=True) + w, h = img_prof["width"], img_prof["height"] + stream = None # make sure this arg is NOT used + filename = None # make sure this arg is NOT used + _imgpointer = img_prof["image"] # pointer to fz_image + + maxf = max(w, h) + fw = w / maxf + fh = h / maxf + else: + fw = fh = 1.0 + + clip = r * ~page.transformationMatrix # target rect in PDF coordinates + + matrix = calc_matrix(fw, fh, clip, rotate=rotate) # calculate matrix + + # Create a unique image reference name. First make existing names list. + ilst = [i[7] for i in doc.getPageImageList(page.number)] # existing names + n = "fzImg" # 'fitz image' + i = 0 + _imgname = n + "0" # first name candidate + while _imgname in ilst: + i += 1 + _imgname = n + str(i) # try new name + + page._insertImage( + filename=filename, # image in file + pixmap=pixmap, # image in pixmap + stream=stream, # image in memory + matrix=matrix, # generated matrix + overlay=overlay, + _imgname=_imgname, # generated PDF resource name + _imgpointer=_imgpointer, # address of fz_image + ) + + +def searchFor(page, text, hit_max=16, quads=False, flags=None): + """ Search for a string on a page. + + Args: + text: string to be searched for + hit_max: maximum hits + quads: return quads instead of rectangles + Returns: + a list of rectangles or quads, each containing one occurrence. + """ + CheckParent(page) + if flags is None: + flags = TEXT_PRESERVE_LIGATURES | TEXT_PRESERVE_WHITESPACE + tp = page.getTextPage(flags) # create TextPage + rlist = tp.search(text, hit_max=hit_max, quads=quads) + tp = None + return rlist + + +def searchPageFor(doc, pno, text, hit_max=16, quads=False, flags=None): + """ Search for a string on a page. + + Args: + pno: page number + text: string to be searched for + hit_max: maximum hits + quads: return quads instead of rectangles + Returns: + a list of rectangles or quads, each containing an occurrence. + """ + + return doc[pno].searchFor(text, hit_max=hit_max, quads=quads, flags=flags) + + +def getTextBlocks(page, flags=None): + """Return the text blocks on a page. + + Notes: + Lines in a block are concatenated with line breaks. + Args: + flags: (int) control the amount of data parsed into the textpage. + Returns: + A list of the blocks. Each item contains the containing rectangle + coordinates, text lines, block type and running block number. + """ + CheckParent(page) + if flags is None: + flags = TEXT_PRESERVE_LIGATURES | TEXT_PRESERVE_WHITESPACE + tp = page.getTextPage(flags) + l = [] + tp.extractBLOCKS(l) + del tp + return l + + +def getTextWords(page, flags=None): + """Return the text words as a list with the bbox for each word. + + Args: + flags: (int) control the amount of data parsed into the textpage. + """ + CheckParent(page) + if flags is None: + flags = TEXT_PRESERVE_LIGATURES | TEXT_PRESERVE_WHITESPACE + tp = page.getTextPage(flags) + l = [] + tp.extractWORDS(l) + del tp + return l + + +def getText(page, option="text", flags=None): + """ Extract a document page's text. + + This is a unifying wrapper for various methods of Page / TextPage classes. + + Args: + option: (str) text, words, blocks, html, dict, json, rawdict, xhtml or xml. + + Returns: + the output of Page methods getTextWords / getTextBlocks or TextPage + methods extractText, extractHTML, extractDICT, extractJSON, extractRAWDICT, + extractXHTML or etractXML respectively. + Default and misspelling choice is "text". + """ + option = option.lower() + if option == "words": + return getTextWords(page, flags=flags) + if option == "blocks": + return getTextBlocks(page, flags=flags) + CheckParent(page) + # available output types + formats = ("text", "html", "json", "xml", "xhtml", "dict", "rawdict") + if option not in formats: + option = "text" + # choose which of them also include images in the TextPage + images = (0, 1, 1, 0, 1, 1, 1) # controls image inclusion in text page + f = formats.index(option) + if flags is None: + flags = TEXT_PRESERVE_LIGATURES | TEXT_PRESERVE_WHITESPACE + if images[f] == 1: + flags |= TEXT_PRESERVE_IMAGES + + tp = page.getTextPage(flags) # TextPage with or without images + + if f == 2: + t = tp.extractJSON() + elif f == 5: + t = tp.extractDICT() + elif f == 6: + t = tp.extractRAWDICT() + else: + t = tp._extractText(f) + + del tp + return t + + +def getPageText(doc, pno, option="text", flags=None): + """ Extract a document page's text by page number. + + Notes: + Convenience function calling page.getText(). + Args: + pno: page number + option: (str) text, words, blocks, html, dict, json, rawdict, xhtml or xml. + Returns: + output from page.TextPage(). + """ + return doc[pno].getText(option, flags=flags) + + +def getPixmap(page, matrix=None, colorspace=csRGB, clip=None, alpha=False, annots=True): + """Create pixmap of page. + + Args: + matrix: Matrix for transformation (default: Identity). + colorspace: (str/Colorspace) cmyk, rgb, gray - case ignored, default csRGB. + clip: (irect-like) restrict rendering to this area. + alpha: (bool) whether to include alpha channel + annots: (bool) whether to also render annotations + """ + CheckParent(page) + doc = page.parent + if type(colorspace) is str: + if colorspace.upper() == "GRAY": + colorspace = csGRAY + elif colorspace.upper() == "CMYK": + colorspace = csCMYK + else: + colorspace = csRGB + if colorspace.n not in (1, 3, 4): + raise ValueError("unsupported colorspace") + + return page._makePixmap(doc, matrix, colorspace, alpha, annots, clip) + + +def getPagePixmap( + doc, pno, matrix=None, colorspace=csRGB, clip=None, alpha=False, annots=True +): + """Create pixmap of document page by page number. + + Notes: + Convenience function calling page.getPixmap. + Args: + pno: (int) page number + matrix: Matrix for transformation (default: Identity). + colorspace: (str,Colorspace) rgb, rgb, gray - case ignored, default csRGB. + clip: (irect-like) restrict rendering to this area. + alpha: (bool) include alpha channel + annots: (bool) also render annotations + """ + return doc[pno].getPixmap( + matrix=matrix, colorspace=colorspace, clip=clip, alpha=alpha, annots=annots + ) + + +def getLinkDict(ln): + nl = {"kind": ln.dest.kind, "xref": 0} + try: + nl["from"] = ln.rect + except: + pass + pnt = Point(0, 0) + if ln.dest.flags & LINK_FLAG_L_VALID: + pnt.x = ln.dest.lt.x + if ln.dest.flags & LINK_FLAG_T_VALID: + pnt.y = ln.dest.lt.y + + if ln.dest.kind == LINK_URI: + nl["uri"] = ln.dest.uri + + elif ln.dest.kind == LINK_GOTO: + nl["page"] = ln.dest.page + nl["to"] = pnt + if ln.dest.flags & LINK_FLAG_R_IS_ZOOM: + nl["zoom"] = ln.dest.rb.x + else: + nl["zoom"] = 0.0 + + elif ln.dest.kind == LINK_GOTOR: + nl["file"] = ln.dest.fileSpec.replace("\\", "/") + nl["page"] = ln.dest.page + if ln.dest.page < 0: + nl["to"] = ln.dest.dest + else: + nl["to"] = pnt + if ln.dest.flags & LINK_FLAG_R_IS_ZOOM: + nl["zoom"] = ln.dest.rb.x + else: + nl["zoom"] = 0.0 + + elif ln.dest.kind == LINK_LAUNCH: + nl["file"] = ln.dest.fileSpec.replace("\\", "/") + + elif ln.dest.kind == LINK_NAMED: + nl["name"] = ln.dest.named + + else: + nl["page"] = ln.dest.page + + return nl + + +def getLinks(page): + """Create a list of all links contained in a PDF page. + + Notes: + see PyMuPDF ducmentation for details. + """ + + CheckParent(page) + ln = page.firstLink + links = [] + while ln: + nl = getLinkDict(ln) + # if nl["kind"] == LINK_GOTO: + # if type(nl["to"]) is Point and nl["page"] >= 0: + # doc = page.parent + # target_page = doc[nl["page"]] + # ctm = target_page.transformationMatrix + # point = nl["to"] * ctm + # nl["to"] = point + links.append(nl) + ln = ln.next + if len(links) > 0: + linkxrefs = page._getLinkXrefs() + if len(linkxrefs) == len(links): + for i in range(len(linkxrefs)): + links[i]["xref"] = linkxrefs[i] + return links + + +def getToC(doc, simple=True): + """Create a table of contents. + + Args: + simple: a bool to control output. Returns a list, where each entry consists of outline level, title, page number and link destination (if simple = False). For details see PyMuPDF's documentation. + """ + + def recurse(olItem, liste, lvl): + """Recursively follow the outline item chain and record item information in a list.""" + while olItem: + if olItem.title: + title = olItem.title + else: + title = " " + + if not olItem.isExternal: + if olItem.uri: + if olItem.page == -1: + resolve = doc.resolveLink(olItem.uri) + page = resolve[0] + 1 + else: + page = olItem.page + 1 + else: + page = -1 + else: + page = -1 + + if not simple: + link = getLinkDict(olItem) + liste.append([lvl, title, page, link]) + else: + liste.append([lvl, title, page]) + + if olItem.down: + liste = recurse(olItem.down, liste, lvl + 1) + olItem = olItem.next + return liste + + # check if document is open and not encrypted + if doc.isClosed: + raise ValueError("document closed") + doc.initData() + olItem = doc.outline + + if not olItem: + return [] + lvl = 1 + liste = [] + return recurse(olItem, liste, lvl) + + +def getRectArea(*args): + """Calculate area of rectangle.\nparameter is one of 'px' (default), 'in', 'cm', or 'mm'.""" + rect = args[0] + if len(args) > 1: + unit = args[1] + else: + unit = "px" + u = {"px": (1, 1), "in": (1.0, 72.0), "cm": (2.54, 72.0), "mm": (25.4, 72.0)} + f = (u[unit][0] / u[unit][1]) ** 2 + return f * rect.width * rect.height + + +def setMetadata(doc, m): + """Set a PDF's metadata (/Info dictionary)\nm: dictionary like doc.metadata'.""" + if doc.isClosed or doc.isEncrypted: + raise ValueError("document closed or encrypted") + if type(m) is not dict: + raise ValueError("arg2 must be a dictionary") + for k in m.keys(): + if not k in ( + "author", + "producer", + "creator", + "title", + "format", + "encryption", + "creationDate", + "modDate", + "subject", + "keywords", + ): + raise ValueError("invalid dictionary key: " + k) + d = "<= 0: + fspec = getPDFstr(ddict["file"]) + dest = str_gotor1 % ( + ddict["page"], + ddict["to"].x, + ddict["to"].y, + ddict["zoom"], + fspec, + fspec, + ) + return dest + + return "" + + +def setToC(doc, toc, collapse=1): + """Create new outline tree (table of contents, TOC). + + Args: + toc: (list, tuple) each entry must contain level, title, page and + optionally top margin on the page. None or '()' remove the TOC. + collapse: (int) collapses entries beyond this level. Zero or None + shows all entries unfolded. + Returns: + the number of inserted items, or the number of removed items respectively. + """ + if doc.isClosed or doc.isEncrypted: + raise ValueError("document closed or encrypted") + if not doc.isPDF: + raise ValueError("not a PDF") + if not toc: # remove all entries + return len(doc._delToC()) + + # validity checks -------------------------------------------------------- + if type(toc) not in (list, tuple): + raise ValueError("'toc' must be list or tuple") + toclen = len(toc) + pageCount = doc.pageCount + t0 = toc[0] + if type(t0) not in (list, tuple): + raise ValueError("items must be sequences of 3 or 4 items") + if t0[0] != 1: + raise ValueError("hierarchy level of item 0 must be 1") + for i in list(range(toclen - 1)): + t1 = toc[i] + t2 = toc[i + 1] + if not -1 <= t1[2] <= pageCount: + raise ValueError("row %i: page number out of range" % i) + if (type(t2) not in (list, tuple)) or len(t2) not in (3, 4): + raise ValueError("bad row %i" % (i + 1)) + if (type(t2[0]) is not int) or t2[0] < 1: + raise ValueError("bad hierarchy level in row %i" % (i + 1)) + if t2[0] > t1[0] + 1: + raise ValueError("bad hierarchy level in row %i" % (i + 1)) + # no formal errors in toc -------------------------------------------------- + + # -------------------------------------------------------------------------- + # make a list of xref numbers, which we can use for our TOC entries + # -------------------------------------------------------------------------- + old_xrefs = doc._delToC() # del old outlines, get their xref numbers + old_xrefs = [] # TODO do not reuse them currently + # prepare table of xrefs for new bookmarks + xref = [0] + old_xrefs + xref[0] = doc._getOLRootNumber() # entry zero is outline root xref# + if toclen > len(old_xrefs): # too few old xrefs? + for i in range((toclen - len(old_xrefs))): + xref.append(doc._getNewXref()) # acquire new ones + + lvltab = {0: 0} # to store last entry per hierarchy level + + # ------------------------------------------------------------------------------ + # contains new outline objects as strings - first one is the outline root + # ------------------------------------------------------------------------------ + olitems = [{"count": 0, "first": -1, "last": -1, "xref": xref[0]}] + # ------------------------------------------------------------------------------ + # build olitems as a list of PDF-like connnected dictionaries + # ------------------------------------------------------------------------------ + for i in range(toclen): + o = toc[i] + lvl = o[0] # level + title = getPDFstr(o[1]) # title + pno = min(doc.pageCount - 1, max(0, o[2] - 1)) # page number + page = doc[pno] # load the page + ictm = ~page.transformationMatrix # get inverse transformation matrix + top = Point(72, 36) * ictm # default top location + dest_dict = {"to": top, "kind": LINK_GOTO} # fall back target + if o[2] < 0: + dest_dict["kind"] = LINK_NONE + if len(o) > 3: # some target is specified + if type(o[3]) in (int, float): # convert a number to a point + dest_dict["to"] = Point(72, o[3]) * ictm + else: # if something else, make sure we have a dict + dest_dict = o[3] if type(o[3]) is dict else dest_dict + if "to" not in dest_dict: # target point not in dict? + dest_dict["to"] = top # put default in + else: # transform target to PDF coordinates + point = dest_dict["to"] * ictm + dest_dict["to"] = point + d = {} + d["first"] = -1 + d["count"] = 0 + d["last"] = -1 + d["prev"] = -1 + d["next"] = -1 + d["dest"] = getDestStr(page.xref, dest_dict) + d["top"] = dest_dict["to"] + d["title"] = title + d["parent"] = lvltab[lvl - 1] + d["xref"] = xref[i + 1] + lvltab[lvl] = i + 1 + parent = olitems[lvltab[lvl - 1]] # the parent entry + + if collapse and lvl > collapse: # suppress expansion + parent["count"] -= 1 # make /Count negative + else: + parent["count"] += 1 # positive /Count + + if parent["first"] == -1: + parent["first"] = i + 1 + parent["last"] = i + 1 + else: + d["prev"] = parent["last"] + prev = olitems[parent["last"]] + prev["next"] = i + 1 + parent["last"] = i + 1 + olitems.append(d) + + # ------------------------------------------------------------------------------ + # now create each outline item as a string and insert it in the PDF + # ------------------------------------------------------------------------------ + for i, ol in enumerate(olitems): + txt = "<<" + if ol["count"] != 0: + txt += "/Count %i" % ol["count"] + try: + txt += ol["dest"] + except: + pass + try: + if ol["first"] > -1: + txt += "/First %i 0 R" % xref[ol["first"]] + except: + pass + try: + if ol["last"] > -1: + txt += "/Last %i 0 R" % xref[ol["last"]] + except: + pass + try: + if ol["next"] > -1: + txt += "/Next %i 0 R" % xref[ol["next"]] + except: + pass + try: + if ol["parent"] > -1: + txt += "/Parent %i 0 R" % xref[ol["parent"]] + except: + pass + try: + if ol["prev"] > -1: + txt += "/Prev %i 0 R" % xref[ol["prev"]] + except: + pass + try: + txt += "/Title" + ol["title"] + except: + pass + if i == 0: # special: this is the outline root + txt += "/Type/Outlines" # so add the /Type entry + txt += ">>" + doc._updateObject(xref[i], txt) # insert the PDF object + + doc.initData() + return toclen + + +def do_links(doc1, doc2, from_page=-1, to_page=-1, start_at=-1): + """Insert links contained in copied page range into destination PDF. + + Parameter values **must** equal those of method insertPDF(), which must + have been previously executed. + """ + # -------------------------------------------------------------------------- + # internal function to create the actual "/Annots" object string + # -------------------------------------------------------------------------- + def cre_annot(lnk, xref_dst, pno_src, ctm): + """Create annotation object string for a passed-in link. + """ + + r = lnk["from"] * ctm # rect in PDF coordinates + rect = "%g %g %g %g" % tuple(r) + if lnk["kind"] == LINK_GOTO: + txt = annot_skel["goto1"] # annot_goto + idx = pno_src.index(lnk["page"]) + p = lnk["to"] * ctm # target point in PDF coordinates + annot = txt % (xref_dst[idx], p.x, p.y, rect) + + elif lnk["kind"] == LINK_GOTOR: + if lnk["page"] >= 0: + txt = annot_skel["gotor1"] # annot_gotor + pnt = lnk.get("to", Point(0, 0)) # destination point + if type(pnt) is not Point: + pnt = Point(0, 0) + annot = txt % ( + lnk["page"], + pnt.x, + pnt.y, + lnk["file"], + lnk["file"], + rect, + ) + else: + txt = annot_skel["gotor2"] # annot_gotor_n + to = getPDFstr(lnk["to"]) + to = to[1:-1] + f = lnk["file"] + annot = txt % (to, f, rect) + + elif lnk["kind"] == LINK_LAUNCH: + txt = annot_skel["launch"] # annot_launch + annot = txt % (lnk["file"], lnk["file"], rect) + + elif lnk["kind"] == LINK_URI: + txt = annot_skel["uri"] # annot_uri + annot = txt % (lnk["uri"], rect) + + else: + annot = "" + + return annot + + # -------------------------------------------------------------------------- + + # validate & normalize parameters + if from_page < 0: + fp = 0 + elif from_page >= doc2.pageCount: + fp = doc2.pageCount - 1 + else: + fp = from_page + + if to_page < 0 or to_page >= doc2.pageCount: + tp = doc2.pageCount - 1 + else: + tp = to_page + + if start_at < 0: + raise ValueError("'start_at' must be >= 0") + sa = start_at + + incr = 1 if fp <= tp else -1 # page range could be reversed + + # lists of source / destination page numbers + pno_src = list(range(fp, tp + incr, incr)) + pno_dst = [sa + i for i in range(len(pno_src))] + + # lists of source / destination page xrefs + xref_src = [] + xref_dst = [] + for i in range(len(pno_src)): + p_src = pno_src[i] + p_dst = pno_dst[i] + old_xref = doc2._getPageObjNumber(p_src)[0] + new_xref = doc1._getPageObjNumber(p_dst)[0] + xref_src.append(old_xref) + xref_dst.append(new_xref) + + # create the links for each copied page in destination PDF + for i in range(len(xref_src)): + page_src = doc2[pno_src[i]] # load source page + links = page_src.getLinks() # get all its links + if len(links) == 0: # no links there + page_src = None + continue + ctm = ~page_src.transformationMatrix # calc page transformation matrix + page_dst = doc1[pno_dst[i]] # load destination page + link_tab = [] # store all link definitions here + for l in links: + if l["kind"] == LINK_GOTO and (l["page"] not in pno_src): + continue # GOTO link target not in copied pages + annot_text = cre_annot(l, xref_dst, pno_src, ctm) + if not annot_text: + print("cannot create /Annot for kind: " + str(l["kind"])) + else: + link_tab.append(annot_text) + if len(link_tab) > 0: + page_dst._addAnnot_FromString(link_tab) + page_dst = None + page_src = None + return + + +def getLinkText(page, lnk): + # -------------------------------------------------------------------------- + # define skeletons for /Annots object texts + # -------------------------------------------------------------------------- + ctm = page.transformationMatrix + ictm = ~ctm + r = lnk["from"] + height = page.rect.height + rect = "%g %g %g %g" % tuple(r * ictm) + + annot = "" + if lnk["kind"] == LINK_GOTO: + if lnk["page"] >= 0: + txt = annot_skel["goto1"] # annot_goto + pno = lnk["page"] + xref = page.parent._getPageXref(pno)[0] + pnt = lnk.get("to", Point(0, 0)) # destination point + ipnt = pnt * ictm + annot = txt % (xref, ipnt.x, ipnt.y, rect) + else: + txt = annot_skel["goto2"] # annot_goto_n + annot = txt % (getPDFstr(lnk["to"]), rect) + + elif lnk["kind"] == LINK_GOTOR: + if lnk["page"] >= 0: + txt = annot_skel["gotor1"] # annot_gotor + pnt = lnk.get("to", Point(0, 0)) # destination point + if type(pnt) is not Point: + pnt = Point(0, 0) + annot = txt % (lnk["page"], pnt.x, pnt.y, lnk["file"], lnk["file"], rect) + else: + txt = annot_skel["gotor2"] # annot_gotor_n + annot = txt % (getPDFstr(lnk["to"]), lnk["file"], rect) + + elif lnk["kind"] == LINK_LAUNCH: + txt = annot_skel["launch"] # annot_launch + annot = txt % (lnk["file"], lnk["file"], rect) + + elif lnk["kind"] == LINK_URI: + txt = annot_skel["uri"] # txt = annot_uri + annot = txt % (lnk["uri"], rect) + + elif lnk["kind"] == LINK_NAMED: + txt = annot_skel["named"] # annot_named + annot = txt % (lnk["name"], rect) + + return annot + + +def updateLink(page, lnk): + """ Update a link on the current page. """ + CheckParent(page) + annot = getLinkText(page, lnk) + if annot == "": + raise ValueError("link kind not supported") + + page.parent._updateObject(lnk["xref"], annot, page=page) + return + + +def insertLink(page, lnk, mark=True): + """ Insert a new link for the current page. """ + CheckParent(page) + annot = getLinkText(page, lnk) + if annot == "": + raise ValueError("link kind not supported") + + page._addAnnot_FromString([annot]) + return + + +def insertTextbox( + page, + rect, + buffer, + fontname="helv", + fontfile=None, + set_simple=0, + encoding=0, + fontsize=11, + color=None, + fill=None, + expandtabs=1, + align=0, + rotate=0, + render_mode=0, + border_width=1, + morph=None, + overlay=True, +): + """ Insert text into a given rectangle. + + Notes: + Creates a Shape object, uses its same-named method and commits it. + Parameters: + rect: (rect-like) area to use for text. + buffer: text to be inserted + fontname: a Base-14 font, font name or '/name' + fontfile: name of a font file + fontsize: font size + color: RGB color triple + expandtabs: handles tabulators with string function + align: left, center, right, justified + rotate: 0, 90, 180, or 270 degrees + morph: morph box with a matrix and a fixpoint + overlay: put text in foreground or background + Returns: + unused or deficit rectangle area (float) + """ + img = page.newShape() + rc = img.insertTextbox( + rect, + buffer, + fontsize=fontsize, + fontname=fontname, + fontfile=fontfile, + set_simple=set_simple, + encoding=encoding, + color=color, + fill=fill, + expandtabs=expandtabs, + render_mode=render_mode, + border_width=border_width, + align=align, + rotate=rotate, + morph=morph, + ) + if rc >= 0: + img.commit(overlay) + return rc + + +def insertText( + page, + point, + text, + fontsize=11, + fontname="helv", + fontfile=None, + set_simple=0, + encoding=0, + color=None, + fill=None, + border_width=1, + render_mode=0, + rotate=0, + morph=None, + overlay=True, +): + + img = page.newShape() + rc = img.insertText( + point, + text, + fontsize=fontsize, + fontname=fontname, + fontfile=fontfile, + set_simple=set_simple, + encoding=encoding, + color=color, + fill=fill, + border_width=border_width, + render_mode=render_mode, + rotate=rotate, + morph=morph, + ) + if rc >= 0: + img.commit(overlay) + return rc + + +def newPage(doc, pno=-1, width=595, height=842): + """Create and return a new page object. + """ + doc._newPage(pno, width=width, height=height) + return doc[pno] + + +def insertPage( + doc, + pno, + text=None, + fontsize=11, + width=595, + height=842, + fontname="helv", + fontfile=None, + color=None, +): + """ Create a new PDF page and insert some text. + + Notes: + Function combining Document.newPage() and Page.insertText(). + For parameter details see these methods. + """ + page = doc.newPage(pno=pno, width=width, height=height) + if not bool(text): + return 0 + rc = page.insertText( + (50, 72), + text, + fontsize=fontsize, + fontname=fontname, + fontfile=fontfile, + color=color, + ) + return rc + + +def drawLine( + page, + p1, + p2, + color=None, + dashes=None, + width=1, + lineCap=0, + lineJoin=0, + overlay=True, + morph=None, + roundcap=None, +): + """Draw a line from point p1 to point p2. + """ + img = page.newShape() + p = img.drawLine(Point(p1), Point(p2)) + img.finish( + color=color, + dashes=dashes, + width=width, + closePath=False, + lineCap=lineCap, + lineJoin=lineJoin, + morph=morph, + roundCap=roundcap, + ) + img.commit(overlay) + + return p + + +def drawSquiggle( + page, + p1, + p2, + breadth=2, + color=None, + dashes=None, + width=1, + lineCap=0, + lineJoin=0, + overlay=True, + morph=None, + roundCap=None, +): + """Draw a squiggly line from point p1 to point p2. + """ + img = page.newShape() + p = img.drawSquiggle(Point(p1), Point(p2), breadth=breadth) + img.finish( + color=color, + dashes=dashes, + width=width, + closePath=False, + lineCap=lineCap, + lineJoin=lineJoin, + morph=morph, + roundCap=roundCap, + ) + img.commit(overlay) + + return p + + +def drawZigzag( + page, + p1, + p2, + breadth=2, + color=None, + dashes=None, + width=1, + lineCap=0, + lineJoin=0, + overlay=True, + morph=None, + roundCap=None, +): + """Draw a zigzag line from point p1 to point p2. + """ + img = page.newShape() + p = img.drawZigzag(Point(p1), Point(p2), breadth=breadth) + img.finish( + color=color, + dashes=dashes, + width=width, + closePath=False, + lineCap=lineCap, + lineJoin=lineJoin, + morph=morph, + roundCap=roundCap, + ) + img.commit(overlay) + + return p + + +def drawRect( + page, + rect, + color=None, + fill=None, + dashes=None, + width=1, + lineCap=0, + lineJoin=0, + morph=None, + roundCap=None, + overlay=True, +): + """Draw a rectangle. + """ + img = page.newShape() + Q = img.drawRect(Rect(rect)) + img.finish( + color=color, + fill=fill, + dashes=dashes, + width=width, + lineCap=lineCap, + lineJoin=lineJoin, + morph=morph, + roundCap=roundCap, + ) + img.commit(overlay) + + return Q + + +def drawQuad( + page, + quad, + color=None, + fill=None, + dashes=None, + width=1, + lineCap=0, + lineJoin=0, + morph=None, + roundCap=None, + overlay=True, +): + """Draw a quadrilateral. + """ + img = page.newShape() + Q = img.drawQuad(Quad(quad)) + img.finish( + color=color, + fill=fill, + dashes=dashes, + width=width, + lineCap=lineCap, + lineJoin=lineJoin, + morph=morph, + roundCap=roundCap, + ) + img.commit(overlay) + + return Q + + +def drawPolyline( + page, + points, + color=None, + fill=None, + dashes=None, + width=1, + morph=None, + lineCap=0, + lineJoin=0, + roundCap=None, + overlay=True, + closePath=False, +): + """Draw multiple connected line segments. + """ + img = page.newShape() + Q = img.drawPolyline(points) + img.finish( + color=color, + fill=fill, + dashes=dashes, + width=width, + lineCap=lineCap, + lineJoin=lineJoin, + morph=morph, + roundCap=roundCap, + closePath=closePath, + ) + img.commit(overlay) + + return Q + + +def drawCircle( + page, + center, + radius, + color=None, + fill=None, + morph=None, + dashes=None, + width=1, + lineCap=0, + lineJoin=0, + roundCap=None, + overlay=True, +): + """Draw a circle given its center and radius. + """ + img = page.newShape() + Q = img.drawCircle(Point(center), radius) + img.finish( + color=color, + fill=fill, + dashes=dashes, + width=width, + lineCap=lineCap, + lineJoin=lineJoin, + morph=morph, + roundCap=roundCap, + ) + img.commit(overlay) + return Q + + +def drawOval( + page, + rect, + color=None, + fill=None, + dashes=None, + morph=None, + roundCap=None, + width=1, + lineCap=0, + lineJoin=0, + overlay=True, +): + """Draw an oval given its containing rectangle or quad. + """ + img = page.newShape() + Q = img.drawOval(rect) + img.finish( + color=color, + fill=fill, + dashes=dashes, + width=width, + lineCap=lineCap, + lineJoin=lineJoin, + morph=morph, + roundCap=roundCap, + ) + img.commit(overlay) + + return Q + + +def drawCurve( + page, + p1, + p2, + p3, + color=None, + fill=None, + dashes=None, + width=1, + morph=None, + roundCap=None, + closePath=False, + lineCap=0, + lineJoin=0, + overlay=True, +): + """Draw a special Bezier curve from p1 to p3, generating control points on lines p1 to p2 and p2 to p3. + """ + img = page.newShape() + Q = img.drawCurve(Point(p1), Point(p2), Point(p3)) + img.finish( + color=color, + fill=fill, + dashes=dashes, + width=width, + lineCap=lineCap, + lineJoin=lineJoin, + morph=morph, + roundCap=roundCap, + closePath=closePath, + ) + img.commit(overlay) + + return Q + + +def drawBezier( + page, + p1, + p2, + p3, + p4, + color=None, + fill=None, + dashes=None, + width=1, + morph=None, + roundCap=None, + closePath=False, + lineCap=0, + lineJoin=0, + overlay=True, +): + """Draw a general cubic Bezier curve from p1 to p4 using control points p2 and p3. + """ + img = page.newShape() + Q = img.drawBezier(Point(p1), Point(p2), Point(p3), Point(p4)) + img.finish( + color=color, + fill=fill, + dashes=dashes, + width=width, + lineCap=lineCap, + lineJoin=lineJoin, + morph=morph, + roundCap=roundCap, + closePath=closePath, + ) + img.commit(overlay) + + return Q + + +def drawSector( + page, + center, + point, + beta, + color=None, + fill=None, + dashes=None, + fullSector=True, + morph=None, + roundCap=None, + width=1, + closePath=False, + lineCap=0, + lineJoin=0, + overlay=True, +): + """ Draw a circle sector given circle center, one arc end point and the angle of the arc. + + Parameters: + center -- center of circle + point -- arc end point + beta -- angle of arc (degrees) + fullSector -- connect arc ends with center + """ + img = page.newShape() + Q = img.drawSector(Point(center), Point(point), beta, fullSector=fullSector) + img.finish( + color=color, + fill=fill, + dashes=dashes, + width=width, + lineCap=lineCap, + lineJoin=lineJoin, + morph=morph, + roundCap=roundCap, + closePath=closePath, + ) + img.commit(overlay) + + return Q + + +# ---------------------------------------------------------------------- +# Name: wx.lib.colourdb.py +# Purpose: Adds a bunch of colour names and RGB values to the +# colour database so they can be found by name +# +# Author: Robin Dunn +# +# Created: 13-March-2001 +# Copyright: (c) 2001-2017 by Total Control Software +# Licence: wxWindows license +# Tags: phoenix-port, unittest, documented +# ---------------------------------------------------------------------- + + +def getColorList(): + """ + Returns a list of just the colour names used by this module. + :rtype: list of strings + """ + + return [x[0] for x in getColorInfoList()] + + +def getColorInfoList(): + """ + Returns the list of colour name/value tuples used by this module. + :rtype: list of tuples + """ + + return [ + ("ALICEBLUE", 240, 248, 255), + ("ANTIQUEWHITE", 250, 235, 215), + ("ANTIQUEWHITE1", 255, 239, 219), + ("ANTIQUEWHITE2", 238, 223, 204), + ("ANTIQUEWHITE3", 205, 192, 176), + ("ANTIQUEWHITE4", 139, 131, 120), + ("AQUAMARINE", 127, 255, 212), + ("AQUAMARINE1", 127, 255, 212), + ("AQUAMARINE2", 118, 238, 198), + ("AQUAMARINE3", 102, 205, 170), + ("AQUAMARINE4", 69, 139, 116), + ("AZURE", 240, 255, 255), + ("AZURE1", 240, 255, 255), + ("AZURE2", 224, 238, 238), + ("AZURE3", 193, 205, 205), + ("AZURE4", 131, 139, 139), + ("BEIGE", 245, 245, 220), + ("BISQUE", 255, 228, 196), + ("BISQUE1", 255, 228, 196), + ("BISQUE2", 238, 213, 183), + ("BISQUE3", 205, 183, 158), + ("BISQUE4", 139, 125, 107), + ("BLACK", 0, 0, 0), + ("BLANCHEDALMOND", 255, 235, 205), + ("BLUE", 0, 0, 255), + ("BLUE1", 0, 0, 255), + ("BLUE2", 0, 0, 238), + ("BLUE3", 0, 0, 205), + ("BLUE4", 0, 0, 139), + ("BLUEVIOLET", 138, 43, 226), + ("BROWN", 165, 42, 42), + ("BROWN1", 255, 64, 64), + ("BROWN2", 238, 59, 59), + ("BROWN3", 205, 51, 51), + ("BROWN4", 139, 35, 35), + ("BURLYWOOD", 222, 184, 135), + ("BURLYWOOD1", 255, 211, 155), + ("BURLYWOOD2", 238, 197, 145), + ("BURLYWOOD3", 205, 170, 125), + ("BURLYWOOD4", 139, 115, 85), + ("CADETBLUE", 95, 158, 160), + ("CADETBLUE1", 152, 245, 255), + ("CADETBLUE2", 142, 229, 238), + ("CADETBLUE3", 122, 197, 205), + ("CADETBLUE4", 83, 134, 139), + ("CHARTREUSE", 127, 255, 0), + ("CHARTREUSE1", 127, 255, 0), + ("CHARTREUSE2", 118, 238, 0), + ("CHARTREUSE3", 102, 205, 0), + ("CHARTREUSE4", 69, 139, 0), + ("CHOCOLATE", 210, 105, 30), + ("CHOCOLATE1", 255, 127, 36), + ("CHOCOLATE2", 238, 118, 33), + ("CHOCOLATE3", 205, 102, 29), + ("CHOCOLATE4", 139, 69, 19), + ("COFFEE", 156, 79, 0), + ("CORAL", 255, 127, 80), + ("CORAL1", 255, 114, 86), + ("CORAL2", 238, 106, 80), + ("CORAL3", 205, 91, 69), + ("CORAL4", 139, 62, 47), + ("CORNFLOWERBLUE", 100, 149, 237), + ("CORNSILK", 255, 248, 220), + ("CORNSILK1", 255, 248, 220), + ("CORNSILK2", 238, 232, 205), + ("CORNSILK3", 205, 200, 177), + ("CORNSILK4", 139, 136, 120), + ("CYAN", 0, 255, 255), + ("CYAN1", 0, 255, 255), + ("CYAN2", 0, 238, 238), + ("CYAN3", 0, 205, 205), + ("CYAN4", 0, 139, 139), + ("DARKBLUE", 0, 0, 139), + ("DARKCYAN", 0, 139, 139), + ("DARKGOLDENROD", 184, 134, 11), + ("DARKGOLDENROD1", 255, 185, 15), + ("DARKGOLDENROD2", 238, 173, 14), + ("DARKGOLDENROD3", 205, 149, 12), + ("DARKGOLDENROD4", 139, 101, 8), + ("DARKGREEN", 0, 100, 0), + ("DARKGRAY", 169, 169, 169), + ("DARKKHAKI", 189, 183, 107), + ("DARKMAGENTA", 139, 0, 139), + ("DARKOLIVEGREEN", 85, 107, 47), + ("DARKOLIVEGREEN1", 202, 255, 112), + ("DARKOLIVEGREEN2", 188, 238, 104), + ("DARKOLIVEGREEN3", 162, 205, 90), + ("DARKOLIVEGREEN4", 110, 139, 61), + ("DARKORANGE", 255, 140, 0), + ("DARKORANGE1", 255, 127, 0), + ("DARKORANGE2", 238, 118, 0), + ("DARKORANGE3", 205, 102, 0), + ("DARKORANGE4", 139, 69, 0), + ("DARKORCHID", 153, 50, 204), + ("DARKORCHID1", 191, 62, 255), + ("DARKORCHID2", 178, 58, 238), + ("DARKORCHID3", 154, 50, 205), + ("DARKORCHID4", 104, 34, 139), + ("DARKRED", 139, 0, 0), + ("DARKSALMON", 233, 150, 122), + ("DARKSEAGREEN", 143, 188, 143), + ("DARKSEAGREEN1", 193, 255, 193), + ("DARKSEAGREEN2", 180, 238, 180), + ("DARKSEAGREEN3", 155, 205, 155), + ("DARKSEAGREEN4", 105, 139, 105), + ("DARKSLATEBLUE", 72, 61, 139), + ("DARKSLATEGRAY", 47, 79, 79), + ("DARKTURQUOISE", 0, 206, 209), + ("DARKVIOLET", 148, 0, 211), + ("DEEPPINK", 255, 20, 147), + ("DEEPPINK1", 255, 20, 147), + ("DEEPPINK2", 238, 18, 137), + ("DEEPPINK3", 205, 16, 118), + ("DEEPPINK4", 139, 10, 80), + ("DEEPSKYBLUE", 0, 191, 255), + ("DEEPSKYBLUE1", 0, 191, 255), + ("DEEPSKYBLUE2", 0, 178, 238), + ("DEEPSKYBLUE3", 0, 154, 205), + ("DEEPSKYBLUE4", 0, 104, 139), + ("DIMGRAY", 105, 105, 105), + ("DODGERBLUE", 30, 144, 255), + ("DODGERBLUE1", 30, 144, 255), + ("DODGERBLUE2", 28, 134, 238), + ("DODGERBLUE3", 24, 116, 205), + ("DODGERBLUE4", 16, 78, 139), + ("FIREBRICK", 178, 34, 34), + ("FIREBRICK1", 255, 48, 48), + ("FIREBRICK2", 238, 44, 44), + ("FIREBRICK3", 205, 38, 38), + ("FIREBRICK4", 139, 26, 26), + ("FLORALWHITE", 255, 250, 240), + ("FORESTGREEN", 34, 139, 34), + ("GAINSBORO", 220, 220, 220), + ("GHOSTWHITE", 248, 248, 255), + ("GOLD", 255, 215, 0), + ("GOLD1", 255, 215, 0), + ("GOLD2", 238, 201, 0), + ("GOLD3", 205, 173, 0), + ("GOLD4", 139, 117, 0), + ("GOLDENROD", 218, 165, 32), + ("GOLDENROD1", 255, 193, 37), + ("GOLDENROD2", 238, 180, 34), + ("GOLDENROD3", 205, 155, 29), + ("GOLDENROD4", 139, 105, 20), + ("GREEN YELLOW", 173, 255, 47), + ("GREEN", 0, 255, 0), + ("GREEN1", 0, 255, 0), + ("GREEN2", 0, 238, 0), + ("GREEN3", 0, 205, 0), + ("GREEN4", 0, 139, 0), + ("GREENYELLOW", 173, 255, 47), + ("GRAY", 190, 190, 190), + ("GRAY0", 0, 0, 0), + ("GRAY1", 3, 3, 3), + ("GRAY10", 26, 26, 26), + ("GRAY100", 255, 255, 255), + ("GRAY11", 28, 28, 28), + ("GRAY12", 31, 31, 31), + ("GRAY13", 33, 33, 33), + ("GRAY14", 36, 36, 36), + ("GRAY15", 38, 38, 38), + ("GRAY16", 41, 41, 41), + ("GRAY17", 43, 43, 43), + ("GRAY18", 46, 46, 46), + ("GRAY19", 48, 48, 48), + ("GRAY2", 5, 5, 5), + ("GRAY20", 51, 51, 51), + ("GRAY21", 54, 54, 54), + ("GRAY22", 56, 56, 56), + ("GRAY23", 59, 59, 59), + ("GRAY24", 61, 61, 61), + ("GRAY25", 64, 64, 64), + ("GRAY26", 66, 66, 66), + ("GRAY27", 69, 69, 69), + ("GRAY28", 71, 71, 71), + ("GRAY29", 74, 74, 74), + ("GRAY3", 8, 8, 8), + ("GRAY30", 77, 77, 77), + ("GRAY31", 79, 79, 79), + ("GRAY32", 82, 82, 82), + ("GRAY33", 84, 84, 84), + ("GRAY34", 87, 87, 87), + ("GRAY35", 89, 89, 89), + ("GRAY36", 92, 92, 92), + ("GRAY37", 94, 94, 94), + ("GRAY38", 97, 97, 97), + ("GRAY39", 99, 99, 99), + ("GRAY4", 10, 10, 10), + ("GRAY40", 102, 102, 102), + ("GRAY41", 105, 105, 105), + ("GRAY42", 107, 107, 107), + ("GRAY43", 110, 110, 110), + ("GRAY44", 112, 112, 112), + ("GRAY45", 115, 115, 115), + ("GRAY46", 117, 117, 117), + ("GRAY47", 120, 120, 120), + ("GRAY48", 122, 122, 122), + ("GRAY49", 125, 125, 125), + ("GRAY5", 13, 13, 13), + ("GRAY50", 127, 127, 127), + ("GRAY51", 130, 130, 130), + ("GRAY52", 133, 133, 133), + ("GRAY53", 135, 135, 135), + ("GRAY54", 138, 138, 138), + ("GRAY55", 140, 140, 140), + ("GRAY56", 143, 143, 143), + ("GRAY57", 145, 145, 145), + ("GRAY58", 148, 148, 148), + ("GRAY59", 150, 150, 150), + ("GRAY6", 15, 15, 15), + ("GRAY60", 153, 153, 153), + ("GRAY61", 156, 156, 156), + ("GRAY62", 158, 158, 158), + ("GRAY63", 161, 161, 161), + ("GRAY64", 163, 163, 163), + ("GRAY65", 166, 166, 166), + ("GRAY66", 168, 168, 168), + ("GRAY67", 171, 171, 171), + ("GRAY68", 173, 173, 173), + ("GRAY69", 176, 176, 176), + ("GRAY7", 18, 18, 18), + ("GRAY70", 179, 179, 179), + ("GRAY71", 181, 181, 181), + ("GRAY72", 184, 184, 184), + ("GRAY73", 186, 186, 186), + ("GRAY74", 189, 189, 189), + ("GRAY75", 191, 191, 191), + ("GRAY76", 194, 194, 194), + ("GRAY77", 196, 196, 196), + ("GRAY78", 199, 199, 199), + ("GRAY79", 201, 201, 201), + ("GRAY8", 20, 20, 20), + ("GRAY80", 204, 204, 204), + ("GRAY81", 207, 207, 207), + ("GRAY82", 209, 209, 209), + ("GRAY83", 212, 212, 212), + ("GRAY84", 214, 214, 214), + ("GRAY85", 217, 217, 217), + ("GRAY86", 219, 219, 219), + ("GRAY87", 222, 222, 222), + ("GRAY88", 224, 224, 224), + ("GRAY89", 227, 227, 227), + ("GRAY9", 23, 23, 23), + ("GRAY90", 229, 229, 229), + ("GRAY91", 232, 232, 232), + ("GRAY92", 235, 235, 235), + ("GRAY93", 237, 237, 237), + ("GRAY94", 240, 240, 240), + ("GRAY95", 242, 242, 242), + ("GRAY96", 245, 245, 245), + ("GRAY97", 247, 247, 247), + ("GRAY98", 250, 250, 250), + ("GRAY99", 252, 252, 252), + ("HONEYDEW", 240, 255, 240), + ("HONEYDEW1", 240, 255, 240), + ("HONEYDEW2", 224, 238, 224), + ("HONEYDEW3", 193, 205, 193), + ("HONEYDEW4", 131, 139, 131), + ("HOTPINK", 255, 105, 180), + ("HOTPINK1", 255, 110, 180), + ("HOTPINK2", 238, 106, 167), + ("HOTPINK3", 205, 96, 144), + ("HOTPINK4", 139, 58, 98), + ("INDIANRED", 205, 92, 92), + ("INDIANRED1", 255, 106, 106), + ("INDIANRED2", 238, 99, 99), + ("INDIANRED3", 205, 85, 85), + ("INDIANRED4", 139, 58, 58), + ("IVORY", 255, 255, 240), + ("IVORY1", 255, 255, 240), + ("IVORY2", 238, 238, 224), + ("IVORY3", 205, 205, 193), + ("IVORY4", 139, 139, 131), + ("KHAKI", 240, 230, 140), + ("KHAKI1", 255, 246, 143), + ("KHAKI2", 238, 230, 133), + ("KHAKI3", 205, 198, 115), + ("KHAKI4", 139, 134, 78), + ("LAVENDER", 230, 230, 250), + ("LAVENDERBLUSH", 255, 240, 245), + ("LAVENDERBLUSH1", 255, 240, 245), + ("LAVENDERBLUSH2", 238, 224, 229), + ("LAVENDERBLUSH3", 205, 193, 197), + ("LAVENDERBLUSH4", 139, 131, 134), + ("LAWNGREEN", 124, 252, 0), + ("LEMONCHIFFON", 255, 250, 205), + ("LEMONCHIFFON1", 255, 250, 205), + ("LEMONCHIFFON2", 238, 233, 191), + ("LEMONCHIFFON3", 205, 201, 165), + ("LEMONCHIFFON4", 139, 137, 112), + ("LIGHTBLUE", 173, 216, 230), + ("LIGHTBLUE1", 191, 239, 255), + ("LIGHTBLUE2", 178, 223, 238), + ("LIGHTBLUE3", 154, 192, 205), + ("LIGHTBLUE4", 104, 131, 139), + ("LIGHTCORAL", 240, 128, 128), + ("LIGHTCYAN", 224, 255, 255), + ("LIGHTCYAN1", 224, 255, 255), + ("LIGHTCYAN2", 209, 238, 238), + ("LIGHTCYAN3", 180, 205, 205), + ("LIGHTCYAN4", 122, 139, 139), + ("LIGHTGOLDENROD", 238, 221, 130), + ("LIGHTGOLDENROD1", 255, 236, 139), + ("LIGHTGOLDENROD2", 238, 220, 130), + ("LIGHTGOLDENROD3", 205, 190, 112), + ("LIGHTGOLDENROD4", 139, 129, 76), + ("LIGHTGOLDENRODYELLOW", 250, 250, 210), + ("LIGHTGREEN", 144, 238, 144), + ("LIGHTGRAY", 211, 211, 211), + ("LIGHTPINK", 255, 182, 193), + ("LIGHTPINK1", 255, 174, 185), + ("LIGHTPINK2", 238, 162, 173), + ("LIGHTPINK3", 205, 140, 149), + ("LIGHTPINK4", 139, 95, 101), + ("LIGHTSALMON", 255, 160, 122), + ("LIGHTSALMON1", 255, 160, 122), + ("LIGHTSALMON2", 238, 149, 114), + ("LIGHTSALMON3", 205, 129, 98), + ("LIGHTSALMON4", 139, 87, 66), + ("LIGHTSEAGREEN", 32, 178, 170), + ("LIGHTSKYBLUE", 135, 206, 250), + ("LIGHTSKYBLUE1", 176, 226, 255), + ("LIGHTSKYBLUE2", 164, 211, 238), + ("LIGHTSKYBLUE3", 141, 182, 205), + ("LIGHTSKYBLUE4", 96, 123, 139), + ("LIGHTSLATEBLUE", 132, 112, 255), + ("LIGHTSLATEGRAY", 119, 136, 153), + ("LIGHTSTEELBLUE", 176, 196, 222), + ("LIGHTSTEELBLUE1", 202, 225, 255), + ("LIGHTSTEELBLUE2", 188, 210, 238), + ("LIGHTSTEELBLUE3", 162, 181, 205), + ("LIGHTSTEELBLUE4", 110, 123, 139), + ("LIGHTYELLOW", 255, 255, 224), + ("LIGHTYELLOW1", 255, 255, 224), + ("LIGHTYELLOW2", 238, 238, 209), + ("LIGHTYELLOW3", 205, 205, 180), + ("LIGHTYELLOW4", 139, 139, 122), + ("LIMEGREEN", 50, 205, 50), + ("LINEN", 250, 240, 230), + ("MAGENTA", 255, 0, 255), + ("MAGENTA1", 255, 0, 255), + ("MAGENTA2", 238, 0, 238), + ("MAGENTA3", 205, 0, 205), + ("MAGENTA4", 139, 0, 139), + ("MAROON", 176, 48, 96), + ("MAROON1", 255, 52, 179), + ("MAROON2", 238, 48, 167), + ("MAROON3", 205, 41, 144), + ("MAROON4", 139, 28, 98), + ("MEDIUMAQUAMARINE", 102, 205, 170), + ("MEDIUMBLUE", 0, 0, 205), + ("MEDIUMORCHID", 186, 85, 211), + ("MEDIUMORCHID1", 224, 102, 255), + ("MEDIUMORCHID2", 209, 95, 238), + ("MEDIUMORCHID3", 180, 82, 205), + ("MEDIUMORCHID4", 122, 55, 139), + ("MEDIUMPURPLE", 147, 112, 219), + ("MEDIUMPURPLE1", 171, 130, 255), + ("MEDIUMPURPLE2", 159, 121, 238), + ("MEDIUMPURPLE3", 137, 104, 205), + ("MEDIUMPURPLE4", 93, 71, 139), + ("MEDIUMSEAGREEN", 60, 179, 113), + ("MEDIUMSLATEBLUE", 123, 104, 238), + ("MEDIUMSPRINGGREEN", 0, 250, 154), + ("MEDIUMTURQUOISE", 72, 209, 204), + ("MEDIUMVIOLETRED", 199, 21, 133), + ("MIDNIGHTBLUE", 25, 25, 112), + ("MINTCREAM", 245, 255, 250), + ("MISTYROSE", 255, 228, 225), + ("MISTYROSE1", 255, 228, 225), + ("MISTYROSE2", 238, 213, 210), + ("MISTYROSE3", 205, 183, 181), + ("MISTYROSE4", 139, 125, 123), + ("MOCCASIN", 255, 228, 181), + ("MUPDFBLUE", 37, 114, 172), + ("NAVAJOWHITE", 255, 222, 173), + ("NAVAJOWHITE1", 255, 222, 173), + ("NAVAJOWHITE2", 238, 207, 161), + ("NAVAJOWHITE3", 205, 179, 139), + ("NAVAJOWHITE4", 139, 121, 94), + ("NAVY", 0, 0, 128), + ("NAVYBLUE", 0, 0, 128), + ("OLDLACE", 253, 245, 230), + ("OLIVEDRAB", 107, 142, 35), + ("OLIVEDRAB1", 192, 255, 62), + ("OLIVEDRAB2", 179, 238, 58), + ("OLIVEDRAB3", 154, 205, 50), + ("OLIVEDRAB4", 105, 139, 34), + ("ORANGE", 255, 165, 0), + ("ORANGE1", 255, 165, 0), + ("ORANGE2", 238, 154, 0), + ("ORANGE3", 205, 133, 0), + ("ORANGE4", 139, 90, 0), + ("ORANGERED", 255, 69, 0), + ("ORANGERED1", 255, 69, 0), + ("ORANGERED2", 238, 64, 0), + ("ORANGERED3", 205, 55, 0), + ("ORANGERED4", 139, 37, 0), + ("ORCHID", 218, 112, 214), + ("ORCHID1", 255, 131, 250), + ("ORCHID2", 238, 122, 233), + ("ORCHID3", 205, 105, 201), + ("ORCHID4", 139, 71, 137), + ("PALEGOLDENROD", 238, 232, 170), + ("PALEGREEN", 152, 251, 152), + ("PALEGREEN1", 154, 255, 154), + ("PALEGREEN2", 144, 238, 144), + ("PALEGREEN3", 124, 205, 124), + ("PALEGREEN4", 84, 139, 84), + ("PALETURQUOISE", 175, 238, 238), + ("PALETURQUOISE1", 187, 255, 255), + ("PALETURQUOISE2", 174, 238, 238), + ("PALETURQUOISE3", 150, 205, 205), + ("PALETURQUOISE4", 102, 139, 139), + ("PALEVIOLETRED", 219, 112, 147), + ("PALEVIOLETRED1", 255, 130, 171), + ("PALEVIOLETRED2", 238, 121, 159), + ("PALEVIOLETRED3", 205, 104, 137), + ("PALEVIOLETRED4", 139, 71, 93), + ("PAPAYAWHIP", 255, 239, 213), + ("PEACHPUFF", 255, 218, 185), + ("PEACHPUFF1", 255, 218, 185), + ("PEACHPUFF2", 238, 203, 173), + ("PEACHPUFF3", 205, 175, 149), + ("PEACHPUFF4", 139, 119, 101), + ("PERU", 205, 133, 63), + ("PINK", 255, 192, 203), + ("PINK1", 255, 181, 197), + ("PINK2", 238, 169, 184), + ("PINK3", 205, 145, 158), + ("PINK4", 139, 99, 108), + ("PLUM", 221, 160, 221), + ("PLUM1", 255, 187, 255), + ("PLUM2", 238, 174, 238), + ("PLUM3", 205, 150, 205), + ("PLUM4", 139, 102, 139), + ("POWDERBLUE", 176, 224, 230), + ("PURPLE", 160, 32, 240), + ("PURPLE1", 155, 48, 255), + ("PURPLE2", 145, 44, 238), + ("PURPLE3", 125, 38, 205), + ("PURPLE4", 85, 26, 139), + ("PY_COLOR", 240, 255, 210), + ("RED", 255, 0, 0), + ("RED1", 255, 0, 0), + ("RED2", 238, 0, 0), + ("RED3", 205, 0, 0), + ("RED4", 139, 0, 0), + ("ROSYBROWN", 188, 143, 143), + ("ROSYBROWN1", 255, 193, 193), + ("ROSYBROWN2", 238, 180, 180), + ("ROSYBROWN3", 205, 155, 155), + ("ROSYBROWN4", 139, 105, 105), + ("ROYALBLUE", 65, 105, 225), + ("ROYALBLUE1", 72, 118, 255), + ("ROYALBLUE2", 67, 110, 238), + ("ROYALBLUE3", 58, 95, 205), + ("ROYALBLUE4", 39, 64, 139), + ("SADDLEBROWN", 139, 69, 19), + ("SALMON", 250, 128, 114), + ("SALMON1", 255, 140, 105), + ("SALMON2", 238, 130, 98), + ("SALMON3", 205, 112, 84), + ("SALMON4", 139, 76, 57), + ("SANDYBROWN", 244, 164, 96), + ("SEAGREEN", 46, 139, 87), + ("SEAGREEN1", 84, 255, 159), + ("SEAGREEN2", 78, 238, 148), + ("SEAGREEN3", 67, 205, 128), + ("SEAGREEN4", 46, 139, 87), + ("SEASHELL", 255, 245, 238), + ("SEASHELL1", 255, 245, 238), + ("SEASHELL2", 238, 229, 222), + ("SEASHELL3", 205, 197, 191), + ("SEASHELL4", 139, 134, 130), + ("SIENNA", 160, 82, 45), + ("SIENNA1", 255, 130, 71), + ("SIENNA2", 238, 121, 66), + ("SIENNA3", 205, 104, 57), + ("SIENNA4", 139, 71, 38), + ("SKYBLUE", 135, 206, 235), + ("SKYBLUE1", 135, 206, 255), + ("SKYBLUE2", 126, 192, 238), + ("SKYBLUE3", 108, 166, 205), + ("SKYBLUE4", 74, 112, 139), + ("SLATEBLUE", 106, 90, 205), + ("SLATEBLUE1", 131, 111, 255), + ("SLATEBLUE2", 122, 103, 238), + ("SLATEBLUE3", 105, 89, 205), + ("SLATEBLUE4", 71, 60, 139), + ("SLATEGRAY", 112, 128, 144), + ("SNOW", 255, 250, 250), + ("SNOW1", 255, 250, 250), + ("SNOW2", 238, 233, 233), + ("SNOW3", 205, 201, 201), + ("SNOW4", 139, 137, 137), + ("SPRINGGREEN", 0, 255, 127), + ("SPRINGGREEN1", 0, 255, 127), + ("SPRINGGREEN2", 0, 238, 118), + ("SPRINGGREEN3", 0, 205, 102), + ("SPRINGGREEN4", 0, 139, 69), + ("STEELBLUE", 70, 130, 180), + ("STEELBLUE1", 99, 184, 255), + ("STEELBLUE2", 92, 172, 238), + ("STEELBLUE3", 79, 148, 205), + ("STEELBLUE4", 54, 100, 139), + ("TAN", 210, 180, 140), + ("TAN1", 255, 165, 79), + ("TAN2", 238, 154, 73), + ("TAN3", 205, 133, 63), + ("TAN4", 139, 90, 43), + ("THISTLE", 216, 191, 216), + ("THISTLE1", 255, 225, 255), + ("THISTLE2", 238, 210, 238), + ("THISTLE3", 205, 181, 205), + ("THISTLE4", 139, 123, 139), + ("TOMATO", 255, 99, 71), + ("TOMATO1", 255, 99, 71), + ("TOMATO2", 238, 92, 66), + ("TOMATO3", 205, 79, 57), + ("TOMATO4", 139, 54, 38), + ("TURQUOISE", 64, 224, 208), + ("TURQUOISE1", 0, 245, 255), + ("TURQUOISE2", 0, 229, 238), + ("TURQUOISE3", 0, 197, 205), + ("TURQUOISE4", 0, 134, 139), + ("VIOLET", 238, 130, 238), + ("VIOLETRED", 208, 32, 144), + ("VIOLETRED1", 255, 62, 150), + ("VIOLETRED2", 238, 58, 140), + ("VIOLETRED3", 205, 50, 120), + ("VIOLETRED4", 139, 34, 82), + ("WHEAT", 245, 222, 179), + ("WHEAT1", 255, 231, 186), + ("WHEAT2", 238, 216, 174), + ("WHEAT3", 205, 186, 150), + ("WHEAT4", 139, 126, 102), + ("WHITE", 255, 255, 255), + ("WHITESMOKE", 245, 245, 245), + ("YELLOW", 255, 255, 0), + ("YELLOW1", 255, 255, 0), + ("YELLOW2", 238, 238, 0), + ("YELLOW3", 205, 205, 0), + ("YELLOW4", 139, 139, 0), + ("YELLOWGREEN", 154, 205, 50), + ] + + +def getColorInfoDict(): + d = {} + for item in getColorInfoList(): + d[item[0].lower()] = item[1:] + return d + + +def getColor(name): + """Retrieve RGB color in PDF format by name. + + Returns: + a triple of floats in range 0 to 1. In case of name-not-found, "white" is returned. + """ + try: + c = getColorInfoList()[getColorList().index(name.upper())] + return (c[1] / 255.0, c[2] / 255.0, c[3] / 255.0) + except: + return (1, 1, 1) + + +def getColorHSV(name): + """Retrieve the hue, saturation, value triple of a color name. + + Returns: + a triple (degree, percent, percent). If not found (-1, -1, -1) is returned. + """ + try: + x = getColorInfoList()[getColorList().index(name.upper())] + except: + return (-1, -1, -1) + + r = x[1] / 255.0 + g = x[2] / 255.0 + b = x[3] / 255.0 + cmax = max(r, g, b) + V = round(cmax * 100, 1) + cmin = min(r, g, b) + delta = cmax - cmin + if delta == 0: + hue = 0 + elif cmax == r: + hue = 60.0 * (((g - b) / delta) % 6) + elif cmax == g: + hue = 60.0 * (((b - r) / delta) + 2) + else: + hue = 60.0 * (((r - g) / delta) + 4) + + H = int(round(hue)) + + if cmax == 0: + sat = 0 + else: + sat = delta / cmax + S = int(round(sat * 100)) + + return (H, S, V) + + +def getCharWidths(doc, xref, limit=256, idx=0): + """Get list of glyph information of a font. + + Notes: + Must be provided by its XREF number. If we already dealt with the + font, it will be recorded in doc.FontInfos. Otherwise we insert an + entry there. + Finally we return the glyphs for the font. This is a list of + (glyph, width) where glyph is an integer controlling the char + appearance, and width is a float controlling the char's spacing: + width * fontsize is the actual space. + For 'simple' fonts, glyph == ord(char) will usually be true. + Exceptions are 'Symbol' and 'ZapfDingbats'. We are providing data for these directly here. + """ + fontinfo = CheckFontInfo(doc, xref) + if fontinfo is None: # not recorded yet: create it + name, ext, stype, _ = doc.extractFont(xref, info_only=True) + fontdict = {"name": name, "type": stype, "ext": ext} + + if ext == "": + raise ValueError("xref is not a font") + + # check for 'simple' fonts + if stype in ("Type1", "MMType1", "TrueType"): + simple = True + else: + simple = False + + # check for CJK fonts + if name in ("Fangti", "Ming"): + ordering = 0 + elif name in ("Heiti", "Song"): + ordering = 1 + elif name in ("Gothic", "Mincho"): + ordering = 2 + elif name in ("Dotum", "Batang"): + ordering = 3 + else: + ordering = -1 + + fontdict["simple"] = simple + + if name == "ZapfDingbats": + glyphs = zapf_glyphs + elif name == "Symbol": + glyphs = symbol_glyphs + else: + glyphs = None + + fontdict["glyphs"] = glyphs + fontdict["ordering"] = ordering + fontinfo = [xref, fontdict] + doc.FontInfos.append(fontinfo) + else: + fontdict = fontinfo[1] + glyphs = fontdict["glyphs"] + simple = fontdict["simple"] + ordering = fontdict["ordering"] + + if glyphs is None: + oldlimit = 0 + else: + oldlimit = len(glyphs) + + mylimit = max(256, limit) + + if mylimit <= oldlimit: + return glyphs + + if ordering < 0: # not a CJK font + glyphs = doc._getCharWidths( + xref, fontdict["name"], fontdict["ext"], fontdict["ordering"], mylimit, idx + ) + else: # CJK fonts use char codes and width = 1 + glyphs = None + + fontdict["glyphs"] = glyphs + fontinfo[1] = fontdict + UpdateFontInfo(doc, fontinfo) + + return glyphs + + +class Shape(object): + """Create a new shape.""" + + @staticmethod + def horizontal_angle(C, P): + """Return the angle to the horizontal for the connection from C to P. + This uses the arcus sine function and resolves its inherent ambiguity by + looking up in which quadrant vector S = P - C is located. + """ + S = Point(P - C).unit # unit vector 'C' -> 'P' + alfa = math.asin(abs(S.y)) # absolute angle from horizontal + if S.x < 0: # make arcsin result unique + if S.y <= 0: # bottom-left + alfa = -(math.pi - alfa) + else: # top-left + alfa = math.pi - alfa + else: + if S.y >= 0: # top-right + pass + else: # bottom-right + alfa = -alfa + return alfa + + def __init__(self, page): + CheckParent(page) + self.page = page + self.doc = page.parent + if not self.doc.isPDF: + raise ValueError("not a PDF") + self.height = page.MediaBoxSize.y + self.width = page.MediaBoxSize.x + self.x = page.CropBoxPosition.x + self.y = page.CropBoxPosition.y + + self.pctm = page.transformationMatrix # page transf. matrix + self.ipctm = ~self.pctm # inverted transf. matrix + + self.draw_cont = "" + self.text_cont = "" + self.totalcont = "" + self.lastPoint = None + self.rect = None + + def updateRect(self, x): + if self.rect is None: + if len(x) == 2: + self.rect = Rect(x, x) + else: + self.rect = Rect(x) + + else: + if len(x) == 2: + x = Point(x) + self.rect.x0 = min(self.rect.x0, x.x) + self.rect.y0 = min(self.rect.y0, x.y) + self.rect.x1 = max(self.rect.x1, x.x) + self.rect.y1 = max(self.rect.y1, x.y) + else: + x = Rect(x) + self.rect.x0 = min(self.rect.x0, x.x0) + self.rect.y0 = min(self.rect.y0, x.y0) + self.rect.x1 = max(self.rect.x1, x.x1) + self.rect.y1 = max(self.rect.y1, x.y1) + + def drawLine(self, p1, p2): + """Draw a line between two points. + """ + p1 = Point(p1) + p2 = Point(p2) + if not (self.lastPoint == p1): + self.draw_cont += "%g %g m\n" % JM_TUPLE(p1 * self.ipctm) + self.lastPoint = p1 + self.updateRect(p1) + + self.draw_cont += "%g %g l\n" % JM_TUPLE(p2 * self.ipctm) + self.updateRect(p2) + self.lastPoint = p2 + return self.lastPoint + + def drawPolyline(self, points): + """Draw several connected line segments. + """ + for i, p in enumerate(points): + if i == 0: + if not (self.lastPoint == Point(p)): + self.draw_cont += "%g %g m\n" % JM_TUPLE(Point(p) * self.ipctm) + self.lastPoint = Point(p) + else: + self.draw_cont += "%g %g l\n" % JM_TUPLE(Point(p) * self.ipctm) + self.updateRect(p) + + self.lastPoint = Point(points[-1]) + return self.lastPoint + + def drawBezier(self, p1, p2, p3, p4): + """Draw a standard cubic Bezier curve. + """ + p1 = Point(p1) + p2 = Point(p2) + p3 = Point(p3) + p4 = Point(p4) + if not (self.lastPoint == p1): + self.draw_cont += "%g %g m\n" % JM_TUPLE(p1 * self.ipctm) + self.draw_cont += "%g %g %g %g %g %g c\n" % JM_TUPLE( + list(p2 * self.ipctm) + list(p3 * self.ipctm) + list(p4 * self.ipctm) + ) + self.updateRect(p1) + self.updateRect(p2) + self.updateRect(p3) + self.updateRect(p4) + self.lastPoint = p4 + return self.lastPoint + + def drawOval(self, tetra): + """Draw an ellipse inside a tetrapod. + """ + if len(tetra) != 4: + raise ValueError("invalid arg length") + if hasattr(tetra[0], "__float__"): + q = Rect(tetra).quad + else: + q = Quad(tetra) + + mt = q.ul + (q.ur - q.ul) * 0.5 + mr = q.ur + (q.lr - q.ur) * 0.5 + mb = q.ll + (q.lr - q.ll) * 0.5 + ml = q.ul + (q.ll - q.ul) * 0.5 + if not (self.lastPoint == ml): + self.draw_cont += "%g %g m\n" % JM_TUPLE(ml * self.ipctm) + self.lastPoint = ml + self.drawCurve(ml, q.ll, mb) + self.drawCurve(mb, q.lr, mr) + self.drawCurve(mr, q.ur, mt) + self.drawCurve(mt, q.ul, ml) + self.updateRect(q.rect) + self.lastPoint = ml + return self.lastPoint + + def drawCircle(self, center, radius): + """Draw a circle given its center and radius. + """ + if not radius > EPSILON: + raise ValueError("radius must be postive") + center = Point(center) + p1 = center - (radius, 0) + return self.drawSector(center, p1, 360, fullSector=False) + + def drawCurve(self, p1, p2, p3): + """Draw a curve between points using one control point. + """ + kappa = 0.55228474983 + p1 = Point(p1) + p2 = Point(p2) + p3 = Point(p3) + k1 = p1 + (p2 - p1) * kappa + k2 = p3 + (p2 - p3) * kappa + return self.drawBezier(p1, k1, k2, p3) + + def drawSector(self, center, point, beta, fullSector=True): + """Draw a circle sector. + """ + center = Point(center) + point = Point(point) + l3 = "%g %g m\n" + l4 = "%g %g %g %g %g %g c\n" + l5 = "%g %g l\n" + betar = math.radians(-beta) + w360 = math.radians(math.copysign(360, betar)) * (-1) + w90 = math.radians(math.copysign(90, betar)) + w45 = w90 / 2 + while abs(betar) > 2 * math.pi: + betar += w360 # bring angle below 360 degrees + if not (self.lastPoint == point): + self.draw_cont += l3 % JM_TUPLE(point * self.ipctm) + self.lastPoint = point + Q = Point(0, 0) # just make sure it exists + C = center + P = point + S = P - C # vector 'center' -> 'point' + rad = abs(S) # circle radius + + if not rad > EPSILON: + raise ValueError("radius must be positive") + + alfa = self.horizontal_angle(center, point) + while abs(betar) > abs(w90): # draw 90 degree arcs + q1 = C.x + math.cos(alfa + w90) * rad + q2 = C.y + math.sin(alfa + w90) * rad + Q = Point(q1, q2) # the arc's end point + r1 = C.x + math.cos(alfa + w45) * rad / math.cos(w45) + r2 = C.y + math.sin(alfa + w45) * rad / math.cos(w45) + R = Point(r1, r2) # crossing point of tangents + kappah = (1 - math.cos(w45)) * 4 / 3 / abs(R - Q) + kappa = kappah * abs(P - Q) + cp1 = P + (R - P) * kappa # control point 1 + cp2 = Q + (R - Q) * kappa # control point 2 + self.draw_cont += l4 % JM_TUPLE( + list(cp1 * self.ipctm) + list(cp2 * self.ipctm) + list(Q * self.ipctm) + ) + + betar -= w90 # reduce parm angle by 90 deg + alfa += w90 # advance start angle by 90 deg + P = Q # advance to arc end point + # draw (remaining) arc + if abs(betar) > 1e-3: # significant degrees left? + beta2 = betar / 2 + q1 = C.x + math.cos(alfa + betar) * rad + q2 = C.y + math.sin(alfa + betar) * rad + Q = Point(q1, q2) # the arc's end point + r1 = C.x + math.cos(alfa + beta2) * rad / math.cos(beta2) + r2 = C.y + math.sin(alfa + beta2) * rad / math.cos(beta2) + R = Point(r1, r2) # crossing point of tangents + # kappa height is 4/3 of segment height + kappah = (1 - math.cos(beta2)) * 4 / 3 / abs(R - Q) # kappa height + kappa = kappah * abs(P - Q) / (1 - math.cos(betar)) + cp1 = P + (R - P) * kappa # control point 1 + cp2 = Q + (R - Q) * kappa # control point 2 + self.draw_cont += l4 % JM_TUPLE( + list(cp1 * self.ipctm) + list(cp2 * self.ipctm) + list(Q * self.ipctm) + ) + if fullSector: + self.draw_cont += l3 % JM_TUPLE(point * self.ipctm) + self.draw_cont += l5 % JM_TUPLE(center * self.ipctm) + self.draw_cont += l5 % JM_TUPLE(Q * self.ipctm) + self.lastPoint = Q + return self.lastPoint + + def drawRect(self, rect): + """Draw a rectangle. + """ + r = Rect(rect) + self.draw_cont += "%g %g %g %g re\n" % JM_TUPLE( + list(r.bl * self.ipctm) + [r.width, r.height] + ) + self.updateRect(r) + self.lastPoint = r.tl + return self.lastPoint + + def drawQuad(self, quad): + """Draw a Quad. + """ + q = Quad(quad) + return self.drawPolyline([q.ul, q.ll, q.lr, q.ur, q.ul]) + + def drawZigzag(self, p1, p2, breadth=2): + """Draw a zig-zagged line from p1 to p2. + """ + p1 = Point(p1) + p2 = Point(p2) + S = p2 - p1 # vector start - end + rad = abs(S) # distance of points + cnt = 4 * int(round(rad / (4 * breadth), 0)) # always take full phases + if cnt < 4: + raise ValueError("points too close") + mb = rad / cnt # revised breadth + matrix = TOOLS._hor_matrix(p1, p2) # normalize line to x-axis + i_mat = ~matrix # get original position + points = [] # stores edges + for i in range(1, cnt): + if i % 4 == 1: # point "above" connection + p = Point(i, -1) * mb + elif i % 4 == 3: # point "below" connection + p = Point(i, 1) * mb + else: # ignore others + continue + points.append(p * i_mat) + self.drawPolyline([p1] + points + [p2]) # add start and end points + return p2 + + def drawSquiggle(self, p1, p2, breadth=2): + """Draw a squiggly line from p1 to p2. + """ + p1 = Point(p1) + p2 = Point(p2) + S = p2 - p1 # vector start - end + rad = abs(S) # distance of points + cnt = 4 * int(round(rad / (4 * breadth), 0)) # always take full phases + if cnt < 4: + raise ValueError("points too close") + mb = rad / cnt # revised breadth + matrix = TOOLS._hor_matrix(p1, p2) # normalize line to x-axis + i_mat = ~matrix # get original position + k = 2.4142135623765633 # y of drawCurve helper point + + points = [] # stores edges + for i in range(1, cnt): + if i % 4 == 1: # point "above" connection + p = Point(i, -k) * mb + elif i % 4 == 3: # point "below" connection + p = Point(i, k) * mb + else: # else on connection line + p = Point(i, 0) * mb + points.append(p * i_mat) + + points = [p1] + points + [p2] + cnt = len(points) + i = 0 + while i + 2 < cnt: + self.drawCurve(points[i], points[i + 1], points[i + 2]) + i += 2 + return p2 + + # ============================================================================== + # Shape.insertText + # ============================================================================== + def insertText( + self, + point, + buffer, + fontsize=11, + fontname="helv", + fontfile=None, + set_simple=0, + encoding=0, + color=None, + fill=None, + render_mode=0, + border_width=1, + rotate=0, + morph=None, + ): + + # ensure 'text' is a list of strings, worth dealing with + if not bool(buffer): + return 0 + + if type(buffer) not in (list, tuple): + text = buffer.splitlines() + else: + text = buffer + + if not len(text) > 0: + return 0 + + point = Point(point) + try: + maxcode = max([ord(c) for c in " ".join(text)]) + except: + return 0 + + # ensure valid 'fontname' + fname = fontname + if fname.startswith("/"): + fname = fname[1:] + + xref = self.page.insertFont( + fontname=fname, fontfile=fontfile, encoding=encoding, set_simple=set_simple + ) + fontinfo = CheckFontInfo(self.doc, xref) + + fontdict = fontinfo[1] + ordering = fontdict["ordering"] + simple = fontdict["simple"] + bfname = fontdict["name"] + if maxcode > 255: + glyphs = self.doc.getCharWidths(xref, maxcode + 1) + else: + glyphs = fontdict["glyphs"] + + tab = [] + for t in text: + if simple and bfname not in ("Symbol", "ZapfDingbats"): + g = None + else: + g = glyphs + tab.append(getTJstr(t, g, simple, ordering)) + text = tab + + color_str = ColorCode(color, "c") + fill_str = ColorCode(fill, "f") + if not fill and render_mode == 0: # ensure fill color when 0 Tr + fill = color + fill_str = ColorCode(color, "f") + + morphing = CheckMorph(morph) + rot = rotate + if rot % 90 != 0: + raise ValueError("rotate not multiple of 90") + + while rot < 0: + rot += 360 + rot = rot % 360 # text rotate = 0, 90, 270, 180 + + templ1 = "\nq BT\n%s1 0 0 1 %g %g Tm /%s %g Tf " + templ2 = "TJ\n0 -%g TD\n" + cmp90 = "0 1 -1 0 0 0 cm\n" # rotates 90 deg counter-clockwise + cmm90 = "0 -1 1 0 0 0 cm\n" # rotates 90 deg clockwise + cm180 = "-1 0 0 -1 0 0 cm\n" # rotates by 180 deg. + height = self.height + width = self.width + lheight = fontsize * 1.2 # line height + # setting up for standard rotation directions + # case rotate = 0 + if morphing: + m1 = Matrix(1, 0, 0, 1, morph[0].x + self.x, height - morph[0].y - self.y) + mat = ~m1 * morph[1] * m1 + cm = "%g %g %g %g %g %g cm\n" % JM_TUPLE(mat) + else: + cm = "" + top = height - point.y - self.y # start of 1st char + left = point.x + self.x # start of 1. char + space = top # space available + headroom = point.y + self.y # distance to page border + if rot == 90: + left = height - point.y - self.y + top = -point.x - self.x + cm += cmp90 + space = width - abs(top) + headroom = point.x + self.x + + elif rot == 270: + left = -height + point.y + self.y + top = point.x + self.x + cm += cmm90 + space = abs(top) + headroom = width - point.x - self.x + + elif rot == 180: + left = -point.x - self.x + top = -height + point.y + self.y + cm += cm180 + space = abs(point.y + self.y) + headroom = height - point.y - self.y + + nres = templ1 % (cm, left, top, fname, fontsize) + if render_mode > 0: + nres += "%i Tr " % render_mode + if border_width != 1: + nres += "%g w " % border_width + if color is not None: + nres += color_str + if fill is not None: + nres += fill_str + + # ========================================================================= + # start text insertion + # ========================================================================= + nres += text[0] + nlines = 1 # set output line counter + nres += templ2 % lheight # line 1 + for i in range(1, len(text)): + if space < lheight: + break # no space left on page + if i > 1: + nres += "\nT* " + nres += text[i] + templ2[:2] + space -= lheight + nlines += 1 + + nres += " ET Q\n" + + # ========================================================================= + # end of text insertion + # ========================================================================= + # update the /Contents object + self.text_cont += nres + return nlines + + # ============================================================================== + # Shape.insertTextbox + # ============================================================================== + def insertTextbox( + self, + rect, + buffer, + fontname="helv", + fontfile=None, + fontsize=11, + set_simple=0, + encoding=0, + color=None, + fill=None, + expandtabs=1, + border_width=1, + align=0, + render_mode=0, + rotate=0, + morph=None, + ): + """ Insert text into a given rectangle. + + Args: + rect -- the textbox to fill + buffer -- text to be inserted + fontname -- a Base-14 font, font name or '/name' + fontfile -- name of a font file + fontsize -- font size + color -- RGB stroke color triple + fill -- RGB fill color triple + render_mode -- text rendering control + border_width -- thickness of glyph borders + expandtabs -- handles tabulators with string function + align -- left, center, right, justified + rotate -- 0, 90, 180, or 270 degrees + morph -- morph box with a matrix and a fixpoint + Returns: + unused or deficit rectangle area (float) + """ + rect = Rect(rect) + if rect.isEmpty or rect.isInfinite: + raise ValueError("text box must be finite and not empty") + + color_str = ColorCode(color, "c") + fill_str = ColorCode(fill, "f") + if fill is None and render_mode == 0: # ensure fill color for 0 Tr + fill = color + fill_str = ColorCode(color, "f") + + if rotate % 90 != 0: + raise ValueError("rotate must be multiple of 90") + + rot = rotate + while rot < 0: + rot += 360 + rot = rot % 360 + + # is buffer worth of dealing with? + if not bool(buffer): + return rect.height if rot in (0, 180) else rect.width + + cmp90 = "0 1 -1 0 0 0 cm\n" # rotates counter-clockwise + cmm90 = "0 -1 1 0 0 0 cm\n" # rotates clockwise + cm180 = "-1 0 0 -1 0 0 cm\n" # rotates by 180 deg. + height = self.height + + fname = fontname + if fname.startswith("/"): + fname = fname[1:] + + xref = self.page.insertFont( + fontname=fname, fontfile=fontfile, encoding=encoding, set_simple=set_simple + ) + fontinfo = CheckFontInfo(self.doc, xref) + + fontdict = fontinfo[1] + ordering = fontdict["ordering"] + simple = fontdict["simple"] + glyphs = fontdict["glyphs"] + bfname = fontdict["name"] + + # create a list from buffer, split into its lines + if type(buffer) in (list, tuple): + t0 = "\n".join(buffer) + else: + t0 = buffer + + maxcode = max([ord(c) for c in t0]) + # replace invalid char codes for simple fonts + if simple and maxcode > 255: + t0 = "".join([c if ord(c) < 256 else "?" for c in t0]) + + t0 = t0.splitlines() + + glyphs = self.doc.getCharWidths(xref, maxcode + 1) + if simple and bfname not in ("Symbol", "ZapfDingbats"): + tj_glyphs = None + else: + tj_glyphs = glyphs + + # ---------------------------------------------------------------------- + # calculate pixel length of a string + # ---------------------------------------------------------------------- + def pixlen(x): + """Calculate pixel length of x.""" + if ordering < 0: + return sum([glyphs[ord(c)][1] for c in x]) * fontsize + else: + return len(x) * fontsize + + # ---------------------------------------------------------------------- + + if ordering < 0: + blen = glyphs[32][1] * fontsize # pixel size of space character + else: + blen = fontsize + + text = "" # output buffer + lheight = fontsize * 1.2 # line height + if CheckMorph(morph): + m1 = Matrix( + 1, 0, 0, 1, morph[0].x + self.x, self.height - morph[0].y - self.y + ) + mat = ~m1 * morph[1] * m1 + cm = "%g %g %g %g %g %g cm\n" % JM_TUPLE(mat) + else: + cm = "" + + # --------------------------------------------------------------------------- + # adjust for text orientation / rotation + # --------------------------------------------------------------------------- + progr = 1 # direction of line progress + c_pnt = Point(0, fontsize) # used for line progress + if rot == 0: # normal orientation + point = rect.tl + c_pnt # line 1 is 'lheight' below top + pos = point.y + self.y # y of first line + maxwidth = rect.width # pixels available in one line + maxpos = rect.y1 + self.y # lines must not be below this + + elif rot == 90: # rotate counter clockwise + c_pnt = Point(fontsize, 0) # progress in x-direction + point = rect.bl + c_pnt # line 1 'lheight' away from left + pos = point.x + self.x # position of first line + maxwidth = rect.height # pixels available in one line + maxpos = rect.x1 + self.x # lines must not be right of this + cm += cmp90 + + elif rot == 180: # text upside down + c_pnt = -Point(0, fontsize) # progress upwards in y direction + point = rect.br + c_pnt # line 1 'lheight' above bottom + pos = point.y + self.y # position of first line + maxwidth = rect.width # pixels available in one line + progr = -1 # subtract lheight for next line + maxpos = rect.y0 + self.y # lines must not be above this + cm += cm180 + + else: # rotate clockwise (270 or -90) + c_pnt = -Point(fontsize, 0) # progress from right to left + point = rect.tr + c_pnt # line 1 'lheight' left of right + pos = point.x + self.x # position of first line + maxwidth = rect.height # pixels available in one line + progr = -1 # subtract lheight for next line + maxpos = rect.x0 + self.x # lines must not left of this + cm += cmm90 + + # ======================================================================= + # line loop + # ======================================================================= + just_tab = [] # 'justify' indicators per line + + for i, line in enumerate(t0): + line_t = line.expandtabs(expandtabs).split(" ") # split into words + lbuff = "" # init line buffer + rest = maxwidth # available line pixels + # =================================================================== + # word loop + # =================================================================== + for word in line_t: + pl_w = pixlen(word) # pixel len of word + if rest >= pl_w: # will it fit on the line? + lbuff += word + " " # yes, and append word + rest -= pl_w + blen # update available line space + continue + # word won't fit - output line (if not empty) + if len(lbuff) > 0: + lbuff = lbuff.rstrip() + "\n" # line full, append line break + text += lbuff # append to total text + pos += lheight * progr # increase line position + just_tab.append(True) # line is justify candidate + lbuff = "" # re-init line buffer + rest = maxwidth # re-init avail. space + if pl_w <= maxwidth: # word shorter than 1 line? + lbuff = word + " " # start the line with it + rest = maxwidth - pl_w - blen # update free space + continue + # long word: split across multiple lines - char by char ... + if len(just_tab) > 0: + just_tab[-1] = False # reset justify indicator + for c in word: + if pixlen(lbuff) <= maxwidth - pixlen(c): + lbuff += c + else: # line full + lbuff += "\n" # close line + text += lbuff # append to text + pos += lheight * progr # increase line position + just_tab.append(False) # do not justify line + lbuff = c # start new line with this char + lbuff += " " # finish long word + rest = maxwidth - pixlen(lbuff) # long word stored + + if lbuff != "": # unprocessed line content? + text += lbuff.rstrip() # append to text + just_tab.append(False) # do not justify line + if i < len(t0) - 1: # not the last line? + text += "\n" # insert line break + pos += lheight * progr # increase line position + + more = (pos - maxpos) * progr # difference to rect size limit + + if more > EPSILON: # landed too much outside rect + return (-1) * more # return deficit, don't output + + more = abs(more) + if more < EPSILON: + more = 0 # don't bother with epsilons + nres = "\nq BT\n" + cm # initialize output buffer + templ = "1 0 0 1 %g %g Tm /%s %g Tf " + # center, right, justify: output each line with its own specifics + spacing = 0 + text_t = text.splitlines() # split text in lines again + for i, t in enumerate(text_t): + pl = maxwidth - pixlen(t) # length of empty line part + pnt = point + c_pnt * (i * 1.2) # text start of line + if align == 1: # center: right shift by half width + if rot in (0, 180): + pnt = pnt + Point(pl / 2, 0) * progr + else: + pnt = pnt - Point(0, pl / 2) * progr + elif align == 2: # right: right shift by full width + if rot in (0, 180): + pnt = pnt + Point(pl, 0) * progr + else: + pnt = pnt - Point(0, pl) * progr + elif align == 3: # justify + spaces = t.count(" ") # number of spaces in line + if spaces > 0 and just_tab[i]: # if any, and we may justify + spacing = pl / spaces # make every space this much larger + else: + spacing = 0 # keep normal space length + top = height - pnt.y - self.y + left = pnt.x + self.x + if rot == 90: + left = height - pnt.y - self.y + top = -pnt.x - self.x + elif rot == 270: + left = -height + pnt.y + self.y + top = pnt.x + self.x + elif rot == 180: + left = -pnt.x - self.x + top = -height + pnt.y + self.y + + nres += templ % (left, top, fname, fontsize) + if render_mode > 0: + nres += "%i Tr " % render_mode + if spacing != 0: + nres += "%g Tw " % spacing + if color is not None: + nres += color_str + if fill is not None: + nres += fill_str + if border_width != 1: + nres += "%g w " % border_width + nres += "%sTJ\n" % getTJstr(t, tj_glyphs, simple, ordering) + + nres += "ET Q\n" + + self.text_cont += nres + self.updateRect(rect) + return more + + def finish( + self, + width=1, + color=None, + fill=None, + lineCap=0, + lineJoin=0, + roundCap=None, + dashes=None, + even_odd=False, + morph=None, + closePath=True, + ): + """Finish the current drawing segment. + + Notes: + Apply stroke and fill colors, dashes, line style and width, or + morphing. Also determines whether any open path should be closed + by a connecting line to its start point. + """ + if self.draw_cont == "": # treat empty contents as no-op + return + if roundCap is not None: + warnings.warn( + "roundCap replaced by lineCap / lineJoin and removed in next version", + DeprecationWarning, + ) + lineCap = lineJoin = roundCap + + if width == 0: # border color makes no sense then + color = None + elif color is None: # vice versa + width = 0 + color_str = ColorCode(color, "c") # ensure proper color string + fill_str = ColorCode(fill, "f") # ensure proper fill string + + if width not in (0, 1): + self.draw_cont += "%g w\n" % width + + if lineCap + lineJoin > 0: + self.draw_cont += "%i J %i j\n" % (lineCap, lineJoin) + + if dashes is not None and len(dashes) > 0: + self.draw_cont += "%s d\n" % dashes + + if closePath: + self.draw_cont += "h\n" + self.lastPoint = None + + if color is not None: + self.draw_cont += color_str + + if fill is not None: + self.draw_cont += fill_str + if color is not None: + if not even_odd: + self.draw_cont += "B\n" + else: + self.draw_cont += "B*\n" + else: + if not even_odd: + self.draw_cont += "f\n" + else: + self.draw_cont += "f*\n" + else: + self.draw_cont += "S\n" + + if CheckMorph(morph): + m1 = Matrix( + 1, 0, 0, 1, morph[0].x + self.x, self.height - morph[0].y - self.y + ) + mat = ~m1 * morph[1] * m1 + self.draw_cont = "%g %g %g %g %g %g cm\n" % JM_TUPLE(mat) + self.draw_cont + + self.totalcont += "\nq\n" + self.draw_cont + "Q\n" + self.draw_cont = "" + self.lastPoint = None + return + + def commit(self, overlay=True): + """Update the page's /Contents object with Shape data. The argument controls whether data appear in foreground (default) or background. + """ + CheckParent(self.page) # doc may have died meanwhile + self.totalcont += self.text_cont + + if not fitz_py2: # need bytes if Python > 2 + self.totalcont = bytes(self.totalcont, "utf-8") + + if self.totalcont != b"": + # make /Contents object with dummy stream + xref = TOOLS._insert_contents(self.page, b" ", overlay) + # update it with potential compression + self.doc.updateStream(xref, self.totalcont) + + self.lastPoint = None # clean up ... + self.rect = None # + self.draw_cont = "" # for possible ... + self.text_cont = "" # ... + self.totalcont = "" # re-use + return + + +def apply_redactions(page): + """Apply the redaction annotations of the page. + """ + + def center_rect(annot_rect, text, font, fsize): + """Calculate minimal sub-rectangle for the overlay text. + + Notes: + Because 'insertTextbox' supports no vertical text centering, + we calculate an approximate number of lines here and return a + sub-rect with smaller height, which should still be sufficient. + Args: + annot_rect: the annotation rectangle + text: the text to insert. + font: the fontname. Must be one of the CJK or Base-14 set, else + the rectangle is returned unchanged. + fsize: the fontsize + Returns: + A rectangle to use instead of the annot rectangle. + """ + if not text: + return annot_rect + try: + text_width = getTextlength(text, font, fsize) + except ValueError: # unsupported font + return annot_rect + line_height = fsize * 1.2 + limit = annot_rect.width + h = math.ceil(text_width / limit) * line_height # estimate rect height + if h >= annot_rect.height: + return annot_rect + r = annot_rect + y = (annot_rect.tl.y + annot_rect.bl.y - h) * 0.5 + r.y0 = y + return r + + CheckParent(page) + doc = page.parent + if doc.isEncrypted or doc.isClosed: + raise ValueError("document closed or encrypted") + if not doc.isPDF: + raise ValueError("not a PDF") + + redact_annots = [] # storage of annot values + for annot in page.annots(types=(PDF_ANNOT_REDACT,)): # loop redactions + redact_annots.append(annot._get_redact_values()) # save annot values + + if redact_annots == []: # any redactions on this page? + return False # no redactions + + rc = page._apply_redactions() # call MuPDF redaction process step + if not rc: # should not happen really + raise ValueError("Error applying redactions.") + + # now write replacement text in old redact rectangles + shape = page.newShape() + for redact in redact_annots: + annot_rect = redact["rect"] + fill = redact["fill"] + if fill: + shape.drawRect(annot_rect) # colorize the rect background + shape.finish(fill=fill, color=fill) + if "text" in redact.keys(): # if we also have text + trect = center_rect( # try finding vertical centered sub-rect + annot_rect, redact["text"], redact["fontname"], redact["fontsize"] + ) + fsize = redact["fontsize"] # start with stored fontsize + rc = -1 + while rc < 0 and fsize >= 4: # while not enough room + rc = shape.insertTextbox( # (re-) try insertion + trect, + redact["text"], + fontname=redact["fontname"], + fontsize=fsize, + color=redact["text_color"], + align=redact["align"], + ) + fsize -= 0.5 # reduce font if unsuccessful + shape.commit() # append new contents object + return True + + +# ------------------------------------------------------------------------------ +# Remove potentially sensitive data from a PDF. Corresponds to the Adobe +# Acrobat 'sanitize' function +# ------------------------------------------------------------------------------ +def scrub( + doc, + attached_files=True, + clean_pages=True, + embedded_files=True, + hidden_text=True, + javascript=True, + metadata=True, + redactions=True, + remove_links=True, + reset_fields=True, + reset_responses=True, + xml_metadata=True, +): + def remove_hidden(cont_lines): + """Remove hidden text from a PDF page. + + Args: + cont_lines: list of lines with /Contents content. Should have status + from after page.cleanContents(). + + Returns: + List of /Contents lines from which hidden text has been removed. + + Notes: + The input must have been created after the page's /Contents object(s) + have been cleaned with page.cleanContents(). This ensures a standard + formatting: one command per line, no double spaces between operators. + This allows for drastic simplification of this code. + """ + out_lines = [] # will return this + in_text = False # indicate if within BT/ET object + suppress = False # indicate text suppression active + make_return = False + for line in cont_lines: + if line == "BT": # start of text object + in_text = True # switch on + out_lines.append(line) # output it + continue + if line == "ET": # end of text object + in_text = False # switch off + out_lines.append(line) # output it + continue + if line == "3 Tr": # text suppression operator + suppress = True # switch on + make_return = True + continue + if line[-2:] == "Tr" and line[0] != "3": + suppress = False # text rendering changed + out_lines.append(line) + continue + if line == "Q": # unstack command also switches off + suppress = False + out_lines.append(line) + continue + if suppress and in_text: # suppress hidden lines + continue + out_lines.append(line) + if make_return: + return out_lines + else: + return None + + if not doc.isPDF: # only works for PDF + ValueError("not a PDF") + if doc.isEncrypted or doc.isClosed: + ValueError("closed or encrypted doc") + + if clean_pages is False: + hidden_text = False + redactions = False + + if metadata: + doc.setMetadata({}) # remove standard metadata + + if not (xml_metadata or javascript): + xref_limit = 0 + else: + xref_limit = doc.xrefLength() + for xref in range(1, xref_limit): + obj = doc.xrefObject(xref) # get object definition source + # note: this string is formatted in a fixed, standard way by MuPDF. + + if javascript and "/S /JavaScript" in obj: # a /JavaScript action object? + obj = "<>" # replace with a null JavaScript + doc.updateObject(xref, obj) # update this object + continue # no further handling + + if not xml_metadata or "/Metadata" not in obj: + continue + + if "/Type /Metadata" in obj: # delete any metadata object directly + doc._deleteObject(xref) + continue + + obj_lines = obj.splitlines() + new_lines = [] # will receive remaining obj definition lines + found = False # assume /Metadata not found + for line in obj_lines: + line = line.strip() + if not line.startswith("/Metadata "): + new_lines.append(line) # keep this line + else: # drop this line + found = True + if found: # if removed /Metadata key, update object definition + doc.updateObject(xref, "\n".join(new_lines)) + + # remove embedded files + if embedded_files: + for name in doc.embeddedFileNames(): + doc.embeddedFileDel(name) + + for page in doc: + if reset_fields: + # reset form fields (widgets) + for widget in page.widgets(): + widget.reset() + widget.update() + + if remove_links: + links = page.getLinks() # list of all links on page + for link in links: # remove all links + page.deleteLink(link) + + found_redacts = False + for annot in page.annots(): + if annot.type[0] == PDF_ANNOT_FILEATTACHMENT and attached_files: + annot.fileUpd(buffer=b"") # set file content to empty + if reset_responses: + annot.delete_responses() + if annot.type[0] == PDF_ANNOT_REDACT: + found_redacts = True + + if redactions and found_redacts: + page.apply_redactions() + + if not page.getContents(): # safeguard against empty /Contents + continue + + if not (clean_pages or hidden_text): + continue # done with the page + + page.cleanContents() + + if hidden_text: + xref = page.getContents()[0] # only one b/o cleaning! + cont = doc.xrefStream(xref).decode() # /Contents converted to str + cont_lines = remove_hidden(cont.splitlines()) # remove hidden text + if cont_lines: # something was actually removed + cont = "\n".join(cont_lines).encode() + doc.updateStream(xref, cont) # rewrite the page /Contents + + +def fillTextbox( + writer, rect, text, pos=None, font=None, fontsize=11, align=0, warn=True +): + """Fill a rectangle with text. + + Args: + writer: TextWriter object (= "self") + text: string or list/tuple of strings. + rect: rect-like to receive the text. + pos: point-like start position of first word. + font: Font object (default Font('helv')). + fontsize: the fontsize. + align: (int) 0 = left, 1 = center, 2 = right, 3 = justify + warn: (bool) just warn on text overflow, else raise exception. + """ + textlen = lambda x: font.text_length(x, fontsize) # just for abbreviation + + rect = fitz.Rect(rect) + if rect.isEmpty or rect.isInfinite: + raise ValueError("fill rect must be finite and not empty.") + + if type(font) is not Font: + font = Font("helv") + + tolerance = fontsize * 0.25 + width = rect.width - tolerance # available horizontal space + + len_space = textlen(" ") # width of space character + + # starting point of the text + if pos is not None: + pos = Point(pos) + if not pos in rect: + raise ValueError("'pos' must be inside 'rect'") + else: # default is just below rect top-left + pos = rect.tl + (tolerance, fontsize * 1.3) + + # calculate displacement factor for alignment + if align == fitz.TEXT_ALIGN_CENTER: + factor = 0.5 + elif align == fitz.TEXT_ALIGN_RIGHT: + factor = 1.0 + else: + factor = 0 + + # split in lines if just a string was given + if type(text) not in (tuple, list): + text = text.splitlines() + + text = " \n".join(text).split(" ") # split in words, preserve line breaks + + # compute lists of words and word lengths + words = [] # recomputed list of words + len_words = [] # corresponding lengths + + for word in text: + # fill the lists of words and their lengths + # this splits words longer than width into chunks, which each are + # treated as words themselves. + if word.startswith("\n"): + len_word = textlen(word[1:]) + else: + len_word = textlen(word) + if len_word <= width: # simple case: word not longer than a line + words.append(word) + len_words.append(len_word) + continue + # deal with an extra long word + w = word[0] # start with 1st char + l = textlen(w) # and its length + for i in range(1, len(word)): + nl = textlen(word[i]) # next char length + if l + nl > width: # if too long + words.append(w) # append what we have so far + len_words.append(l) + w = word[i] # start over with new char + l = nl # and its length + else: # if still fitting + w += word[i] # just append char + l += nl # and add its length + words.append(w) # output tail of long word + len_words.append(l) # output length of long word tail + + idx = 0 # index of current word processed + line_ctr = 0 # counter for output lines + end_idx = len(words) # number of words + + # ------------------------------------------------------------------------- + # each loop outputs one line + # ------------------------------------------------------------------------- + while True: + if idx >= end_idx: # all words processed + break + + # compute the new insertion point + if line_ctr == 0 and len_words[0] >= rect.x1 - pos.x and idx == 0: + line_ctr = 1 # first word wont fit in first line: take next one + + if line_ctr == 0: # first line in rect + start = pos + width = rect.x1 - pos.x + else: + start = Point(rect.x0 + tolerance, pos.y + fontsize * 1.3 * line_ctr) + width = rect.width - tolerance + + if start.y > rect.y1: # landed below rectangle area + if warn: + print("Warning: only fitting %i of %i total words." % (idx, end_idx)) + break + else: + raise ValueError("only fitting %i of %i total words." % (idx, end_idx)) + + word = words[idx] # get first word for the line + if word.startswith("\n"): # remove any leading line breaks + word = word[1:] + + line = [word] # list of words fitting in this line + len_line = [len_words[idx]] # list of word lengths + + exhausted = False # switch indicating we are done + justify = True # enable text justify as default + next_words = range(idx + 1, end_idx) # remaining words in text + + for i in next_words: # try adding more words to the line + nw = words[i] # next word + if nw.startswith("\n"): # forced line break + justify = False # do not justify this current line + break + tl = len_space + len_words[i] + if tl + sum(len_line) + (len(line) - 1) * len_space > width: # won't fit + break + line.append(nw) # append new word + len_line.append(len_words[i]) # add its length + if i >= end_idx - 1: # if we exhausted the words + justify = False # do not justify current line + exhausted = True # and turn on switch + + # finished preparing a line + if align != fitz.TEXT_ALIGN_JUSTIFY: # trivial alignments + fin_len = sum(len_line) + (len(line) - 1) * len_space + d = (width - fin_len) * factor # takes care of alignment + start.x += d + writer.append(start, " ".join(line), font, fontsize) + else: # take care of justified alignment + writer.append(start, line[0], font, fontsize) # always 1st word + if len(line) > 1: # more than one word in the line + if justify is False: # if no justify use space as gap + gap = len_space + else: + gap = (width - sum(len_line)) / (len(line) - 1) + this_gap = len_line[0] + gap # gap for 2nd word + for j in range(1, len(line)): + writer.append(start + (this_gap, 0), line[j], font, fontsize) + this_gap += len_line[j] + gap # gap for next word + + if len(next_words) == 0 or exhausted is True: # no words left + break + + idx = i # number of next word to read + line_ctr += 1 # line counter diff --git a/fitz/version.i b/fitz/version.i new file mode 100644 index 0000000..8032634 --- /dev/null +++ b/fitz/version.i @@ -0,0 +1,6 @@ +%pythoncode %{ +VersionFitz = "1.17.0" +VersionBind = "1.17.4" +VersionDate = "2020-07-20 18:09:40" +version = (VersionBind, VersionFitz, "20200720180940") +%} \ No newline at end of file diff --git a/installation/.DS_Store b/installation/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..187ca867e87d3cf5d2ebd8cbc9e70fd2d77b7327 GIT binary patch literal 6148 zcmeHK!A=`75FJBEom3S$R4PYbkT~R!h)6*~NUHz`Zb*yZP*Ac>>e##?G)}r8E9|Kv z3Nwd>^eEPsVXVW2Xykr{g z9Hm*S^(a4&~PTSi%O|{+W%$jQ2?Y5e#)9%h@ zHTh+;y>~RY{&73~IlKF1wgCb!EFbK$4RV{Z|J9-D&!EN5?%S+Wk+P) zqn62Ig(A$?aeigOL3kEj z>lknhlo?pH-3HbF!@s}(%So>17;p@{D+Wa6z(45WmbkVqY>sNJLLH!zP+Vcrq+rA4 h*ceobH&Bh>m?8twV=OG92gUse7#dvT82G0QJOjWNuT%g4 literal 0 HcmV?d00001 diff --git a/installation/centos/centos_pymupdf.sh b/installation/centos/centos_pymupdf.sh new file mode 100644 index 0000000..e60ec51 --- /dev/null +++ b/installation/centos/centos_pymupdf.sh @@ -0,0 +1,17 @@ +wget https://mupdf.com/downloads/mupdf-1.17.0-source.tar.gz +tar -zxvf mupdf-1.17.0-source.tar.gz + +cd mupdf-1.17.0-source +export CFLAGS="-fPIC -std=gnu99" + +make HAVE_X11=no HAVE_GLFW=no HAVE_GLUT=no prefix=/usr/local +sudo make HAVE_X11=no HAVE_GLFW=no HAVE_GLUT=no prefix=/usr/local install + +cd .. + +rm -rf PyMuPDF +git clone https://github.com/pymupdf/PyMuPDF.git +cd PyMuPDF + +sudo python setup.py build +sudo python setup.py install diff --git a/installation/freebsd/freebsd_pymupdf.sh b/installation/freebsd/freebsd_pymupdf.sh new file mode 100644 index 0000000..7fe71ef --- /dev/null +++ b/installation/freebsd/freebsd_pymupdf.sh @@ -0,0 +1,22 @@ +setenv CFLAGS -fPIC + +# install the pre-required tool +pkg install swig30 + +# Ensure we have a build of the current version +wget https://mupdf.com/downloads/archive/mupdf-1.17.0-source.tar.gz +tar -zxvf mupdf-1.17.0-source.tar.gz + +rm -rf PyMuPDF +git clone https://github.com/pymupdf/PyMuPDF.git + +cd mupdf-1.17.0-source +# replace files in mupdf source +cp ../PyMuPDF/fitz/_config.h include/mupdf/fitz/config.h + +gmake HAVE_X11=no HAVE_GLFW=no HAVE_GLUT=no prefix=/usr/local +gmake HAVE_X11=no HAVE_GLFW=no HAVE_GLUT=no prefix=/usr/local install + +cd ../PyMuPDF +python setup.py build +python setup.py install diff --git a/installation/ubuntu/ubuntu_pymupdf.sh b/installation/ubuntu/ubuntu_pymupdf.sh new file mode 100644 index 0000000..973419d --- /dev/null +++ b/installation/ubuntu/ubuntu_pymupdf.sh @@ -0,0 +1,20 @@ +wget https://mupdf.com/downloads/archive/mupdf-1.17.0-source.tar.gz +tar -zxvf mupdf-1.17.0-source.tar.gz + +cd mupdf-1.17.0-source + +export CFLAGS="-fPIC" +# install some prerequirement +sudo apt install pkg-config python-dev + +make HAVE_X11=no HAVE_GLFW=no HAVE_GLUT=no prefix=/usr/local +sudo make HAVE_X11=no HAVE_GLFW=no HAVE_GLUT=no prefix=/usr/local install + +cd .. + +rm -rf PyMuPDF +git clone https://github.com/pymupdf/PyMuPDF.git +cd PyMuPDF + +sudo python setup.py build +sudo python setup.py install diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..cf77a17 --- /dev/null +++ b/setup.py @@ -0,0 +1,94 @@ +from distutils.core import setup, Extension +from distutils.command.build_py import build_py as build_py_orig +import sys, os + +# custom build_py command which runs build_ext first +# this is necessary because build_py needs the fitz.py which is only generated +# by SWIG in the build_ext step +class build_ext_first(build_py_orig): + def run(self): + self.run_command("build_ext") + return super().run() + + +# check the platform +if sys.platform.startswith("linux"): + module = Extension( + "fitz._fitz", # name of the module + ["fitz/fitz.i"], + include_dirs=[ # we need the path of the MuPDF headers + "/usr/include/mupdf", + "/usr/local/include/mupdf", + ], + # library_dirs=[''], + libraries=[ + "mupdf", + #'crypto', #openssl is required by mupdf on archlinux + #'jbig2dec', 'openjp2', 'jpeg', 'freetype', + "mupdf-third", + ], # the libraries to link with + ) +elif sys.platform.startswith(("darwin", "freebsd")): + module = Extension( + "fitz._fitz", # name of the module + ["fitz/fitz.i"], + # directories containing mupdf's header files + include_dirs=["/usr/local/include/mupdf", "/usr/local/include"], + # libraries should already be linked here by brew + library_dirs=["/usr/local/lib"], + # library_dirs=['/usr/local/Cellar/mupdf-tools/1.8/lib/', + #'/usr/local/Cellar/openssl/1.0.2g/lib/', + #'/usr/local/Cellar/jpeg/8d/lib/', + #'/usr/local/Cellar/freetype/2.6.3/lib/', + #'/usr/local/Cellar/jbig2dec/0.12/lib/' + # ], + libraries=["mupdf", "mupdf-third"], + ) + +else: + # =============================================================================== + # Build / set up PyMuPDF under Windows + # =============================================================================== + module = Extension( + "fitz._fitz", + ["fitz/fitz.i"], + include_dirs=[ # we need the path of the MuPDF's headers + "./mupdf/include", + "./mupdf/include/mupdf", + ], + libraries=[ # these are needed in Windows + "libmupdf", + "libresources", + "libthirdparty", + ], + extra_link_args=["/NODEFAULTLIB:MSVCRT"], + # x86 dir of libmupdf.lib etc. + library_dirs=["./mupdf/platform/win32/Release"], + # x64 dir of libmupdf.lib etc. + # library_dirs=['./mupdf/platform/win32/x64/Release'], + ) + +pkg_tab = open("PKG-INFO").read().split("\n") +long_dtab = [] +classifier = [] +for l in pkg_tab: + if l.startswith("Classifier: "): + classifier.append(l[12:]) + continue + if l.startswith(" "): + long_dtab.append(l.strip()) +long_desc = "\n".join(long_dtab) + +setup( + name="PyMuPDF", + version="1.17.4", + description="Python bindings for the PDF rendering library MuPDF", + long_description=long_desc, + classifiers=classifier, + url="https://github.com/pymupdf/PyMuPDF", + author="Jorj McKie, Ruikai Liu", + author_email="jorj.x.mckie@outlook.de", + cmdclass={"build_py": build_ext_first}, + ext_modules=[module], + py_modules=["fitz.fitz", "fitz.utils", "fitz.__main__"], +) -- 2.30.2

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 z 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�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

R)u{(nHc{75B(p>s7 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-even-odd.png b/docs/images/img-even-odd.png new file mode 100644 index 0000000000000000000000000000000000000000..a959c438fc8e42f3e3a47dd77e971169176d2314 GIT binary patch literal 83760 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 F{|`EGC};ox literal 0 HcmV?d00001 diff --git a/docs/images/img-extract-imga.jpg b/docs/images/img-extract-imga.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ab90a8cf17da902dca7cef455c7e276ae5b9716 GIT binary patch literal 43357 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

^+T|-x0CrdQYPKGvaZ?9}#~*JcfvU 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 z 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%0D4uQNrNP1MRThy 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 literal 0 HcmV?d00001 diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..d282b3b --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\README.md", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..98aef7b5ddbb5f4784fbe1171f5197693d34d439 GIT binary patch literal 126976 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Πzf6<2i+xZbQinO^$~OzI?-Jqpes7im3VaBc66;a zbUjwP%|g69^eBh)Joc+9(Ei_~c7T_p=fx+*FTl6{lf{kV3en+x$@^{ZHQpKTpm&|u z0blj+^<3&nd-^;_d3g8B?nm5Tc3ac= zWRQf&66dS*p1%v7Dd!evt&|)+v&JE1ckhz&Q+vk|K>eAc`W&_=FtI zn&QmmK%_xZy&WPcO@v3E(9&ogfP_iiC_rj!X;HE=4U47naAlC`0ief|l_LPHuBK25 z#8T&UAArh9-LRgXoW@(~B5<8!G%uST0J@0O4gpjVS0){qkdt}nhzHX~Kk2nTN>*;u zGgbqqr*t2HZXh*-08+X&1Yt+S@)^7UyMojXm@>^p56F>ZYC;B_<_F+G(%cWg#ztCO z%nH&PnVFI!a4%ANOis+hf@lpS&l?KB${Im zl9w%nUQ<2BGSG)H8br|i0DO?FI{|>oaDqT+*8{1{G~A-ez@}%2a384+n^I0= zM^?a^AAom}HCq6v3?xW-5>k~T2ghZ3!u$l_TS(nz04x2B27}yb4ATQZM@gUupt=a* z(oZ=XIhaaA-vF@j5#WQQq8s34WmJR_7(^2h_@e}Z!=$ncf-5Q@c%Ip`w}(`BLbx)U z>gOlvzTR%3bQ3_9!~LR#vuST5U*4hS4vP#ZV^1ot5Yk&tsy3>bTP=7O8eZtAQWCa2 z&ev`LfHDR;rgLM_nA`<}C1vyj@L^JMyqb^I(k~zEfi9~M2)>O}tk;7Jgb=oTiBuh@ zmqUG(s1)KaApTerd@otX&}-tIklDWLH<}KC)#6Uw#x|lm;vqw4F}A zvPLh!pmO$~N=er$-oFaM>01@_7Puu3-l|g*nulyy&X=#$)6YQ}_Q^8}A#Ka}@)bu6 zZCT1!R_nRb_W+!zs8UiN;7k1wu1rR7#N33OW-h7s@yn_ptOV}Bgo$cuIvpRU4yh~Q zD=YO>Rbi@>R12i40>bI|r>8h>rimYk|rxl z0q{B)zqL*tk zyekI*qEZ0(N$pYqC^N&L@{UB1(GS4oq-u$tQa`*K5u{Q8EF`sy^^^wEefU<~fiFd) zAAp3cTm(Qx6q7KGu=k!<9a z_9yM%vcGJ9+kU`)E&pjpNZ95%SNN6FCp}^PsPt1|x9GCH-xjs?+oo(6yIvJ?w&gaf zc%|cE;Vp5})g;`=_jp~zD9+AN^FOq$^DZN0j*qxQ(iZ7B@9#X5 z!V+oPSt+b=MO+8GGT9>qJuz3EK==o}pCMO!?;u|izH0l4?R(xqvc>jI??%$*J&&9z ze%)#1r-jYJnXV6dFC!P){^Xevt`z_1usfpOCbHJ^cVZR4z{{>}o-4d{;*a^urCU8m zxgU0SxkuffaG&F`cow@8?$_PVx%2K@z_Rf*=Vu+q!|e&bk{pf|j>Y0HoogKfo*z0t zJ*V%6N{#ANSJlzFLQ+|i%8_u253eT|PPu?Gp?}-uNSmB4_de<}J zgZx?2h?EewNN-D@mM)XdaeU2nt9t=|yJJfFmaCLJ>m2uZz--?SZLztnXtHYxpEXsfkG=(-c;P&v{u$oTfhn`S0o#s$mHZiG@H#F3OxF^zdjepb2P7Uc&AK8A-O}`vrBF3tey1Y`CKZK zhA|9_>n!(U6p_x}B1gfD!~Mu*E3tNs_Vw-Leu&ZljcDN@n{vcd(o*jZ3aF1(`!*HcI z_kEP}7%VeS0NHSlVIVxg)Q*qe(;w5&ypPg0fmdlNABk{};1j-6yWrwv?qQFu%nGV0 zl)RaHNPlSJ9@HNix$o)^A?`c+Ly&twe`w(D$BeNFKqE{rOwCAU1z~9ER=Oug>AhxLQx7U0+xrwOgcK5igRBpu?4L(kR8PwVaKL(Up)f< zPHZ)U35~l0YoyxExZAOa`jUjZ4MWxS2lo{ek8z>F-HPGrs)D-(!#m>n)B)61u*x@M zeM}Y_?#n1qSa$cZPW>fJp$lw26#qrcAD^I)O;4t|FCdt8UEpw^$6$To!F>)Rvo*%( z6n7Jb>MIWJv)DWxi3G;H5$ipW2JbMvhmE@d%W7QeaMxpAG;th(+-ERGR?b1^rRFH^ z)5riLMR_KbK!pbS;B6ey#cO4EjSgcTclEV8WO9*X=X)r#Han~Y9Um()luAv=; znFF{_V71g$FLyOoOJ4(VS7EiF!@!%F`#45ZGz0ERd`QCln3iX_k0B~I2{XhDcLn;{ zjqTh=iEW7$Px~a{CCzgXt8O3fv`#9tV3~p1T+Y1%{q5wS~GeV;gE@ip%@F^CJ@1sxW;!`q{JxHI!p-uw9&zf;#9mHZy+5`Kx?tYdgU2hKOe$;)RG=V6f+|nK$K=On8qxP zW`aE4uGGgg{v2ix<4x7?vv>^@JcAmmYv%hECX5fAIfa?4x;VZ65Ta4VJB?`?RP0H- zoC*SUReHk2fxL42j8)l-4GHmf4jftKgZJM zMi5{!XAficV4KuT*!0>$l`%cF4dn%oC>2a%P{C^!=K;LN5b+Rbv@+963l+XFQ2U>NMTTd; zXi$ue-Nug7h4Rv8)=s_SY{DqYyh<-AROh#iSaze)a|0s5=7xsO;|&?DH)eDkHk>xa z9E(BfOmd9=AWyU-PMb;Ej7hZWgTDn)+Tf>G3>pW26C#-vun`NS%mbl9ELn_6=}VqP_^7XO z78 z|2yFq0OtMw74QoHy8j<`|Nout|NjmA0zlpW{}B8Fz_|baO1l65JlOqz8vF(z1HS=? zi+jW!;x@5Y>=rkO?P4R`4p=Kzi)G>xQ4&Em-oJYP=>47d*WQ=CFM5CMeaibi?{~fT zdB5(x9qtFb$@^*VC%jj9FY$iRdye-^*s+lFPI||@QSUDAsCU2{_I7&Ldt1Fh?;3B7 zx5~TRyU6SH3SJKG4Sd7%YtJt{&wHNneBbjRoLX>~=PRBsc&_(c9Zr`%V$FLQqgZc9AVeF%0->~+W8yTOvs@80a*=x%q1+-uyc+!gMnZprO* zTU>vJofNOSUUt3U`l0J_*F&yvxxNnfA%4+ygX>z?$6S}VKHxgb^*-0MEA1L{o#NW* z8gli5O<}#O#kJ10+Ewi;buDsvTs-+3`6GFq{0I3td5%0yzDK@8zDd4HZXur|pC(t6 z%gKkydF1_M25brYNP_Gk+sOdgLORGXq>-#8HKdZ15Fa7L>imoI56<5>f9ZVD`6K5O z&WD}fc7DToyYoxV8=aqYUg`XZ^MlT_ou@kwI5W<1XViI;bJ)4n+3h^u+3IX?);U)= z%bbgyUZ+F&yYRN~JGck(CE+J<7vy8YcZGX}uL-vbpBFwOd_wrBaFKAnFe{uYiDtaNyj6O`yF>X?r?nB z@ma@pj*mMobzJB;$8m<^pkvCBa>N|F93zfCM~`EJqs?ALdWv^ZX>Aa zd4Q4o8TmFN-(uuGM($gT*JsG z7`d8}s~Gt>BUdu=F-ERn%%*ZSw?`PypM$Ta5bVlCC$Z3q6%E$~OhZs4?2>fmqJ0|=N z7D=9w93xpq_A@fYNQRL#Ba@6wFtU%4y^N$78E0gSkt8EBBMC<0jKmm;GI9zd5k^jC zWDg^|8QI0iNsR1d8D?aNk!_3&GBUtOKO=pNY-OaEkrNmRGqQz| z&5ZOg(#=R0Bb|(FVx)tSjf`wyw`70y;#mHY6`7aE%jJ(On9~k*PBX2PBJ4Rk-a zd4Q4o8TmFN-(uuGM($}8kxw#mEhE=3 z@(D(+X5=bHKF-LMNQStNF>(bXA7$inMlNIIQbs<)$R&(i%*aJZ`neA?@*zepWaNX4 ze1MS)7&)Jj^B6gok#iV1n~}2^In2l`Bk#u@(fwyq_YCTuPTluW_cZFBO5GXi9-{6+ z>K>r(Gr0$8--9g>$)E%Yn2z7_4J4D@W)E%Vm0CoGR z+eh84)a|A23DgZ!cMEklQ7(dc*$zI=cVA zn(qIvru+Z>bpOAf?*I4G{r`Tt|KCsd|NH6wf4^b>zn|{^_tX9Ve!BnPPxt@(>HdE| z-T&{W`~NHH{{M2i|G$*(|1YKc|CiGJ|4Zop|HX9wzmM+!Ur6`=FSKL%7urDCFUO7_ z(3zmxsIbRKtS;(nds znOt6;gq?>nY+#Ph$C5gSx;sX?{UaTlws!k>%@b*l*R|T~^26VJq21|xDnAoW?D2>D zN4ht65BUd&!hIb>JN>=gJN+G_BLm@n$fB>if5hKE0RN*~x32Xo=?!Kx2kyZ|@lD+|n_$I@H`;N1ONv5jt^C?VQ2v}zO;CH_Aq2ZaySZ1P2PU3!g_}xH+dDCMkrEnq=o)07{ z9Y5UP)qSFW*Skssh63$mbI^PIt9O|*-BUNa$Rm_=LLocnFC_jHb^fAx|3T68nD1C1 zgzYJ4h`MupZlMHz?Rvp5og@mYUHI%VPY;E`hPk0I$k?Ob#gw27RCS;mWB*HL1SXt< zj;qX11u|17k)G*^iJ5KF@Jk8U_nw$9f%!*CFSNg*3#*f$Qsa(zT+ZcEvD5_2qeq4n z^e%0-omV)8v%|k;!q}RD-)zHhgFTN&F1HGTeb?}Fhq*W$&DAcUWEcj@039f_@NxL* z5d3~Q3O|F16xJpTKkbKCn*riB517K>c~Z~@P9gRPqB?7o&|!1#9{t^FC_rHeUs8;=*xcY3;F*`7csrZ-t#N&zil)Zyd?^T*hp#;epnTqoZ92Z zcl1cO4_;)-n`DhsC|Or$Iqar=Pc1Or`HhasU{WPYvyS$Mw~cng7^JTb6{AJcI+q%v zEF<70p>kM(3+4+gbUXZV6$aLv$@{QH5K7?J*k`S$y--bzC2xLmntPx*(9r+XfPb>z zsnJ<|^y#z#mI3cPo2oIjy1tvpI9s$igp%%n+G2$rKf->i7s2VdFie=Y`3h0S6ttEs z1mO#RzW3`|SgX<>3l>HI`NE2TH?9Z@A+*eFMNk;zP)e@!xWZsV%=cX4y0d2NbZR@V zMxWXYGf81yyt!i)1{=CoVbDL>#pZj_{-eHiq$bc`o2Z5;Z{TnaOS;FuDQr+tl(4PQ zTz(*yld}h8c!%q=huXKhx_dfCw~qK>cRcv=g5N|S$8PR^3fF+sdYuw#Wl zYD#05S~^{$RXG2BU6cN*WIl}vTBG>=e~xXV$S6vnD1o8`iV`SFpeTW&1d0+UN}wo# zq6CT(C`#b}ISHWt@8ECbq`l$;?&rw3^DcNO{uL!qlt57eMG5@7NZ?%G0%1uY;QZi@ z18_Jq?h3%&GV~){O3oEND;DVO;qD#&!Z3d{=XLD}k8FYMKAodO!{P1Sb1@ym%JwVV zXfzDln>t7Qg&zjO34h11e^WH4?D%3|1jC87{v&;IKzt|rXu%+Q6#U>~3eJ!Fdxi%3 z=H#k>9EJ~~1O56VE2aL7B_FJxr+8*a&v5;FFYcTqXz}0oK7Z}*T0fA%daasJ4`Z$K z<9b|Hzk;Sj^q`Ij_xHp0wi94O+Z;(CvS%3fpXq3*%sj2M-dG;|Vx)>4&Hpa7b%*PZ zURzM^oYpbCu6HWzyD20T^+;u#+eXkqx4=HU`8$h0JWRi&&#v(aB|GaZvr&Bu2mOYK z2OG|_{UU z(Bt9L0`mtXbKtz+Ix*Hi`8i2XT`RKw!BYL=_}}+^Q2joteyKOsO8Wq7ERG6frH7A| zDg$B~zHlCKm*#ulMDS018&*ERX1aErhH|94sE7t2wUKv4ok2^1wzlt57eMF|uoP?SJX z0!0ZFB~X;WzeED~{XfOM&PlIGk4s;W&X*F>@lvVymiVOj1@Ub0WO1XoLUedv@_yTU z4V$%jE_Vjs<^6>7L-H*7x?7j$2v>$c{-3#E<`tQ4Lc3tdBx{h-# zC2x^u$PMHG86+XH#Q7@RlJ`aDh0c_7i?i0r3%?K^5N;4o7j_HB3o9Idcf9Dh*Kvs> z>1cQO_!s#*_|y4*zQq1p`*-2=^cgrQz0USG+jF)XY&qKraNE%9*88j%TX$L8tRt{1AuAzZmMUAsL;^N@b- z8d5bzlc2W)tG5WL6aW{K(j)+sYl_)5JIw9pE)uF_J+gZ5j!Gf&VZJh<0_M5RvwttC zjzhR|W3_%gkM8SF38gWbKfMDIek%`GS}~XO5Arop2wS<57Cs@zvolk8?Rwnch1=Pm zAXTTRrI_a?*IwJ*q&flsMNZmvKbi;9_#A0G86e7~^-zF5BUPff}1Mo}|JQ0BF*3l-Ib4k%021H4b#vKqv5#`()jOKD6 z(jckc4v~~5((X6XJOBxkx>0~A_p+NVJu*E2^mwvz1fcJ9b#Je&oYW2L>6z|GGCe?g zi%9JdKoxPp@d?`HNk%{EwLVH#ZqqYX1E;5SAAoKkHG=?Bx-|r0N5r0E@B-`#QafPE zRJ(x*aGD>02T5~30O4E{r^SjF9~IurG!F}+HIP6bMAI*?$7t%sO-dB?5pJh{g|u!3 zcyqIw%bYu%AkG{fM0}jo_L}OU-T4F&G(P|zB)Z=+H!rGnrvsf0^b)r-*8Ia;Npw}(`BLbx)U>X-cJzTR%3 zbQ3`4yBoQ;kuUF1bGN7$TPgQjk=}ArwNcI7YEiGcQYi^r9_MQ}06-Z7#_O+)egHm9 zDvnq4v8vZ%!Ch4N?G}P>BNglQV5Rn|5W_x7N1acjGlyg$(BkX2|KB3F9hJ7*KkY&T&YFE+}otOjpjl7It{=Zv@{PuUME$p zdKzl^R0@CxNNEcIloukyi5CkgsVJo+QDTIX2B&&iDN+%)<-r0qpm+^zK!Art3q`m=AbXZap zWT0OV2vE~A3Fk=tIuqV>p&;N*&m=raD(eAXQ2`aOXm^ak&ra!gXc8VHl>t2*;#0m# zNjO1Pt%Y!<7KR%M4PFvHnXFy|C_1WXE%f`zASwNUgm;nEN6&+VTIMt)K9KNX5n;zOqtJRTZX6Nwq+#Dj=MWe+!O( zc3Yd~sdfl82B|7j^O^vMPmpRKO++0s zaFOoRM07@f$NA$zsRWSu-f{kIe7Oi=^A8t)h?IMe7+TrNukt{sGLIN;#4~tFc^!Y0 z8&FjG7Sla>#yj&!=`s8&m!6v8`aFY|lzR9T1W?Kp0Gfkxsh;j5OH23_&VPVeQp>Lp z{sCrjIls!Gm&kA@pTSFfrThxskdk&&pMGZ_S$HzP!meXt@l0+o18Q4N_mPDg`4u(; zCYMSp7|ll(uHcti0kdQYn*?Ie)bLNd)%;S6fqx*Ao`Qekt>Bsd{~9N~DBUJqAjPB( z$uGVp-XmTi9ufz{wW81an)gw-S?@61pcnE=p5J=D2lwISJwu+5$Lap1`+m6B?rird z?ql3bU9YE&gf#bNu;yjNiyFv%h5jl6}&?$zEc6!}hf8 z)3$SM3EM{7QtKPmC#|VhpZv%0?TWbM=Up5&ap%->n%&T*XC9KSI(l^p$t2E z&pNz2Gg;k7VpfT-nMIvLneS*A+aqf50?y4>&!XC)s94%1?V1NLJYZ1gFkx1cA;VxRRnd(9UsR#+YEwoL(FPbhGiJk0TF^lSeGC@Y@E%$I!a#r_|*f76(7F7aeZO4M3BSrIh1*bfa z*a-kd-M|FR8KKGpiS_Wu&!U#Fem$L?SgI;Cok=HV($UFO{78HfYve<-s6|jih{ZyS zo|>G3WnN@lo|u9ItPZBe;4*jvhr||>&@Ac|?M=M5TauAM{C7Jd{3ZT$mXBfXqQ!sDvnK zsjCx}0wM)zp#q|$)e+C94n*@Z+O&**K*mVjEUF%g>Ta?MnH~UpB8&x8JCw1oS$SYD4V8wSS?*}t2XAUQb4qWyioa2EI=u`sA4>-*O zm{Ldy)ea>kePyNl$ac$XP$Es`uqu}Tk4~{A*60)n zGA9CSoV?}%%teqZ>LN<6SvdzU9Evh{0XGFW)JhZ_n4BW<%)~@0mp6C;w+DIy>L*HX zP;7c|Fy%xdXLHz8YeB1JJep46KZM-EFP}v%g{q2HOEe4F zQU}651+h>uQDViTSvYVrn}Lvv`HET8MwGH9Qqf76vK0d1hxyW3R74ax#3yj!&0I2+ zLxy@`*@8-lGNY*`G?kKm+b3Yj zhKh*Ne+*wU3|_#U&##B zBT7nxsW|MHhG8|X`vA29QbKh^NhvxF-x|=+ta$*l1ZECYN0es7-*P}!)Fu7a|A6@k z6%nQGW0`zr5UyWWDIk6Z2vkE9L@XNLhX|Dd;wOMW6+}TKGueZPP$?jO2=fjqApdCI z>9;-xT^7}l`Nveh^%2MmRS+dFb(N!1$V(vpSyV=jXm9MdI)uhq4j{@G4_G5appQnd zN@Ll~bQ-3cLJsM-{DD-RspqU(Cshi7mr2zbg#d$eJn z{XS|mvG!XUgz9NMea*6}c_96jq&5!_ML0&Ys?iU?#iSw!K&2D)!BheEKZU?o&_9uy zECegEg9XHVX4HPLkF47dFy-?Gz#x%#u%q^Kuab3BrU>vFHbpQ!LqVX&WFUefuwlhg zs!{+vN2<~~0E%EXrS@}AlbT5YC{-~SPz_#4=P^<@0Wjsw3hC(fQ_}-LA0c)7=7B=p z3#_UA+=HZQuU+u!NF+`Z4;;jVD~hwE#u^ISVzRpd3eUH)>i zpY)NH&c8dKbAH8nxpSYh!&xEx9`1R+Rya+Fz&-9|j$gw~?Uy=c9DCqf|04cP{t5mj zxL3CM9B<8q`1P;do|h1`#R+#4fV#FfN3Z-aQ7dDgcBh z!PyEcv%+VHF$8tNMX^#B1f3o0EEJ1%BNvk9vzQGn}-GQ98eEjVi(k7tDGLokJBg+l|7Ld|2I-|7#G^gtbyV1 z0ZL6>@dEBGs4p(EjrH9+l*uTw2gVyPJVT7%LW|-;TW!&3BGHq{PGYYB(}v~;#EA0Wj>-0exX^oXTcE3(wDJ9>DyBuRe^6Y$cr(O#oM2ss}JXfOK%3 ztzfk1ng=jX@fC-0ovkiBplL=jo!DSNAp9Yy87{Szn!$|^*=RgZ$BWSq$ooLLxawA< ztAwHm3|_!}4N}C_w<;@;CLMyXTtvyLen8$tf`@S>u59X1L!s}nX?zX?;#>zk0@vq; z9?>}-&4M{6Kc2$~`V*k9gfiorT`4n2c`^kj_-E2NgBNg@fFyDK{!Ws-h%Y;gD|uxZ zk)wJjb0LMZV1~nWyfVY3(r^$lt*h<>6zoGfj0<|TRT&D`(iGm+1DG9T`C(kyD|*Jk zEF8Q`9SG|uC5LfIujm;#BjZ1W90O9vrMx0_SSgQ#K9GWA|8do<`2l$}NDvqE1_^HN z963?WW+!uWtm{vJu7Qz`i+XjWgM^jvcqSpEzzvUp_mhglxWHHXTPoL;f}X7q2ww&g zFf8r0uBv$evy@+c7?<{n1X4NL@4Wm750$yXvjB0!!G5g;@zJ{fKDhGPY1So)@og4jtd<#m5OZ|5!q5Thh?O|N* zE3E~$p(HkCGW#Z@*?mSor1l%g7nl7C5|uXlEhI3DYks9q%abuVk&qL(F9b|a1&@Hg3Gk=@%!A(y9mWtH9sz$HX`V%WKzZ94 z0k8%R!$dd_3*uc3`Jk>aPd;FwGsb~Oz+Xnz&7$IK+H`XRLg zpkkvgp&}`Ykd!6X_V#eI#akj<1_d0ZN^8s5ypK z9Dv3Lz+TI*n;i$Nx=;a2Alim;Sul?Pl8q# zuLVd!vBM!uHOa+nPB0Kg0H;i(G5OS#oMkS2ntTm9k+MO-Kw{D6EF zq`L=@s&r}NDy3K3T6+ZiV}Rdnz(b+nY90LW9femjmeKGC_^(52>;k;0CsD(%n!54; z*lVEfCjnNi`*4^|W z>7_bkiyVa;;|iZ4Mkkn3cR&nfAa;%R_3fk%gl&W#ydA=n9t<-bEMah!iBp*Q3D8X- zgHb>$GN50YRj}y+ut!6W909D-Beh`71DGo4NyC6q`Wp@E%VejGur25*D6+Plze^ZWsR zJMfI>yPmIlZURff2R-leOnOfC^m;aU8sWDD%RL_V-`#J(FA9DHzbUxKeT(~(@VkOD z+>`Fz?g95Ece8u7yUZ=REv`Sfe&u@B^{DF}_@%+8T$j1dbsci;b?tWbyEeK)u2rt3 zE+_djd6m3C9w*--x4|zEt|S-2K7=fh$%*6yavZ5AezK6*oo_i`aX#yO)bfJ!>(0+P zuY}zR2c3JJdz^#L7UwGGVy9JjQ+P#qPIyeXPq+z3697F(NIY9(7WjmX|F+<#Ws)?1JC0hs$5O@Myn1xo~e zjOOm52~ZZ+lKX}ZfyEhxd>yL@6I%vm(S#hE9vXKlRhQ`ByM1(1t~Yo|lZZKskk#!=~yxxYaNr#X2<=fLE}fLLbmH*4sdouF43= zm*;U~Vr;BH1@pB>IOos^ti79xwKCKOzILA*Yi8tOr@TLi(Z{;qjPqDUR zk63p@KFGl!t-ZsAgytREx7?B#o8^O}eZaLMnm%^g$JBXf=+1qGwa@q|>00RPs(sE? zz}4U*s(sQR)`@Rc-zM#St`m5|H-75ZK&q*I$gcoQ^eNRo@^1-!JG8es3fE+$r_8^k@Hr3`ezYpe)CvAgXa06l_1Ja@5B{Eg6iWldFe>GW-N9Xx~qNG;(QPesQ7x2p6lkpd5#PNR3`A1*FpiArzDH3t!h=DNj?Oy)aK2#{gK$n1PgpUeGo z9;sTP{lDN`nd+}SnIrbqp2!jXv~4+JAMNoR(N}vcNA%GiRx!h z?uCo$UZ@E!uv$`{aWl7)|F!ELp<0D0T}BqgslOOWdoV)X8KEwTQ0pR8euUabp0>C! zi--FlOuP^#?g$eXhl$!Sv9IJ!EAwd9n8dROx7+QpHywW(MeSOiJhQDI_nm{=Gl z=7))qVdB6rv0s?z7AD$;iH6caF?6X;{(jvH&(*zfVciSWbuaXjet}^GJz;d17!fA+ z4HG@WMC%Zt-xVengb6$&<{Y9bqg@gvs*|x+zNyuyP<$|rZ$okBB_>cMg_Vm+=NlK% z93oguGbTsLiBWQVl<}f}Maia7vSE}=M@ctI+ELPol3Ik+|A~@+ zMakcz9nMei9{LkCLxO$(N%fPvwJmq~9A&y**0a5GAjRlGjAZtD@xQ zD0zOAJU2?79VO3e?-aeUHxtCUHt_O(*HA%{V&g)mRX)zkeLFxf6q*_ zObT-UFWx8KcJEP^`!DiN_m1^SyhFWlEcbWuni-~Nr+-U-0?Gf;^bPP5a8~+wNd8OG zhw3k+r=*9a`=#5!XTUG1k0JR#p1L!2ZR(uVT6hmAfDOU$RNqwlR0dN2x5+n?&p_tC zJ$Y?%Lvnp`RWh4AJUKCWP_j?5L$Xma=Kkz{;=bZO=5BE}yXQjNV1>KHJ=~q*4u-8k z8#m+X&iBp-&hxN1xWT!^In!C=lsShwBc0w(OUU_OCSFZElDH*tY2x(6v5Dfup@}g{ z!nf_;?XT=NA>lu4-(g>CUt+Jf*VtwDk@hTmv^@|~ervly{P+0B@fYJ;<5$Hmh@TKI zj~^MI8b2`JJ>DYj#befQ)>qbB*0a`D>jvv0>qM6Jr&@!ouGj;Lo4=Z$n{Sv;nfF4k zVS{<9xg5F;)6G%lK4u5gi~SY*CiY?MrP#xml(ki!F-HjZKY>iuI1QiKSwO z@sshfvE6vYxXrl2INPW(mKsMGQ;eZTAEUF;7}^j!@EZ9aO;YETmXs7#8aHHq()Lmt zR=V3b)?Ke-5Puknl11f()FpU2nP0xJ!nlP#IYqqZFph=a+bB=Dpg%!#L(J*1mIk@F z!l!rV=zBY{CZHCS8VPyudBs)pSr=Nbpowo$mM^fa zjlPs5G>Dr;E0GbFOQ9rETxeWO?a1nkaQ=YYNY7F`he{b!p1+{7B)`lU$&^yw({3Zm zSK-r+r%8ja>fMY)$c4o#$`<9#OUf!&7}J!k}7#u1_9k+2jo4p%(^KUeKSH`YQ&JrOU+MTh628Pz#*kG4qV7d+NNl2nlg z)MCk?kRNrtYDqF0f=Fl_tFplZm6o$SevWE4zCw#3eDz$FIbR(+<6z@_^(=hBI8SvK zP&s|Qvj4i+TfM2=+J$ie@u8j(Um}M$jrHY=1*Mghr6s(6Ry2S45zK0sfnto_mc|3JN~|zE`Zb0O6kU4G1x1xBp<$n0 zP_)pPLJhW{sJx<*WodmfRRCM(MHP#T>#0QaNNngjnnMCMGIXbhp8e0uCmTp3DFp{{VxJCM49 zx-fm%?2+R}%ru6Fn8weTGTAsNl#h(eEkZ1u@!-$}9;=&&E^w~H=vNW(CNhKGc*Oib zyNrH?;VoS}vGy}9PlYeekS%QO7wVDW1ZooPr@DEdX|!MKUL09ito=wscKCkYQPzH_ z%Zn{}?Y9Q8E_zrQwzBSpeW~;C9+LJNy@>g+fSFsgaAp2N^ z3ibw!O%dvJpTh7|Xz+3XmCF>*;EBSy8OsWdE9jS(BhR2ZQ$6tWuPVuE*Za>PI~m61 zb?DQ4dN}WR8kg0f*QaCcbjqIBEf4l$9fZO|Evc9pC0lY;WO1&rT;qrEcgnRd`H@O_ zV5u;UqrM8$mdbn_EDl#e`a5(XG&&kRDYL+eKs%X!HMk*U8KYfFzeInT{7f1QMiwr^ zjs#q@U}iBN!>ZBQkLhpFgP;pyMG;?>stDDex}U5z(kF`bS@k~L5_|())O+V>yoV+F z6n+Fwm*HrtTnPL`X?N7Ua4L;(AuEggI&^D(1~zBVPM`;ln(1g88pXQlxoh+eT2R$T zV54Dp>GG+i6-AZUw$*1+!>Eh;Vrs~FSWV^?U}FtE2J6o9TtL5q-ixnGtM{aCis3fU zqS1aAe!fyLU|-_^`UPVJHo8Tuy+H#*?y~FxYp+Y@nEzptsh<|1s_0=+6tva!r>GGA zd{va?;|1O=h2lFX^tHlEwEjKE*1_k5BYo2&#QakIBJIi%tZ^!jU>nU z7p%R<9(avneWl{Ug3wT(&4* zznZfQR=~$n|G;whtSl;q9$F|j;9G=}=Fg{3pjpJnktepi?>d6I z7H;*&QsEm#9ba8tSeliKqt(s$fvR!`t5U|Ior|fhg>ksbb98wj1_ZxKW7O@e6vkx_ zfuNWghJE1DV(lu@|1Z>j)-vxx|Nq=fab{4aC1n2hyhpt2ylU?d?Co3W7t@!di?EB| zF!f&Qrqrs`A=s_AlJ6z&O`Zp@e-o0O+m}<(>lAB|HP-5E{$svr-eI0? zmYEaHy-Y3kHg>~LiWS6$$J)m%?0`RDY&4EGW*L2rjQ*v*O}|R7X1o6uc$D4$>rhSF zy7lOFxv<->Chc6sQ(0Ojy*h|E1+L+As3x7<`ts4OcGaYhs}zIicIx>)It9)@$c40V z>&eCW+iFuyI=M<06?0kYNeYk$yem~lv~iVu9th^(`4K#%jq5)V?cEh)kBv9+C<2~u zoOacum8)utfs6+^AHlH$xsZ0Q$|Z}L3E1qoC?einjH4)N+&-GOP;<2_nd;48{qhSQ{vd*XgLm$b%GV z>ubNocy3af-Sv-e0dgTV+4_Eb`7jh9#aQ)5)#?=u7ojL>d>HZ~g;H4c>#l!*gPf*oN#V6g6aE2GW$CZL zX<_$UOM0%#4s>UogPpISz@})(kOu6eLQJPIlk^cB9v+@FVC#DwX}nTWf>p0n%{&z# zk2vxm_1F6Hu%I1JYOksR@jDKdQ^IlNrsK7dx~qC^NcERlLQ$t6@i(jzNYOPIZg?Zm zH)$_O`~ls0QfyT!pLwjtAR+F?_`a4@S^ZamynUl0LU8PWB?~FC`j#wpm6b3bjA}38 zo)2MtK&q|2`leFX$Y+($FacheBCjO{SHA{o4?Z`bCbr`VNx3z6Le?d~U`Z+k$l)n; zN>XZ7ZAybErs%AK6^?`R5paeTT=BF4XDANNtr!SM!POrK*ocK*fGi_Z3|trD9g$jV z@YA9dX?~%h)n@RWgmOupHK<`u(G1!zfzlZ`Yhl4c%B;SUb3_vax=|s$5O5!hb|#fp zzn$?6B($-<4}Bv70=z4n{nnByt8y;-U%DFqbq#lx<0(m{RXrt|cRK0fkf~8F3ce+H zlce6N-XtsRfXPR2!1LHzQfaN{7m_Hjdafl^R;5~8N9e0VB2OB&NUgQLJm=z9Hyu2x z{r%rPd0Ps{k=rEXHf=Y#O@Ix~RPdTTrN-QMWQE^i#Y}M-*|$tx!MIxK?FR{!+LQHc$B&|k|L5zT^e`X4;!x0 zxI^_8aFG1uOGo6 z_w>M142e8NAS;4Bh=a2&I1h?&2BI%GgE%-FfOBw!6P;7US8xV#SjPT>@#a8q=DvLX z&Jntv9|hmHPLs6j(XSLt8%Y>!e)QZ$BtOF#IpCz{?uS(V?3zI{WZQVcIPu-{B1@IK;<4KE+n>Sz|7BPaD71&zt)NN&WcP^fqk$ zBmHju9KA#zr?tCxy`aU8kf zi&-5K%L1t-h=6A<#6S|uqBX08?_!lPMZq@{d68&VU(KdlovKMVQ{O>+X{KQLv#4@K zE{2@OL2M@RO#Qq{g+&3EQCdhW3mP_vfTu0ilSnL6H9`@xG8{y}V>`X8 zNhDK4N);On4J#|d@-OWu)TMC;+OL`fG&S3wN1Ln_5;_H`-%&3T%Iax_)UW7AVXH*c z$2WnX*|Z-=Zr`IFLRN{im`=Y0AHnej$|Gs5zVbfDiVn$U>b;`~`eG_T9uK1wu}u`S zKb1mtAx3cA2M&_U{6UQsS70Zm5FB@)RY)@PWgy&(bPkbv6H-Yg^HcGwMkrn|Qb(zzwnj|pQ>&j6p`op~!;`vGTs_*&F$7)nq0^4adDs>iCqeuc%t5H0e z;GiINGFGEV(DEy{lkk)pfS(nKSHV{+`sGOV!zvRASG)Ogr22r5gsgxMt>>>s1yMY5 zS3EL_Sn833#g!leo=(V%ge#R7_PhKIvQX41NdASUC-EwHy1F0h zic!n4@|wkpXb?kA+mI7UO7-RRnAN13WF@00c|!6W^eYmAcG0hrw0cRx&u;ol@&xda_!IEq z_vQDiAd1JX#bbvAAlQwt5DE(~6#>s0^cNC z301Kj_s)3BOEj7)|A9HPUzivvQcNwiSu75OD)#f23L@UZYqQB49xeGmH}=0hQ&BBTHs ziXyMAsBK87U_();)02dDIhlq*n+p1E2Cld&KIo=xa9J;0+n4OC&VOfFw@cLVP4 zzMK0m#`wQCc+^wK%!^)sE{0OhM^4>#lhe7V$zHjdOH}u z1|Te!7SVT%LgYYOL0xu}!%29S&fp221s=&*n5$81p|4{XM8K29klG$R{u3>NV}d0W93mC|)2iF$%J3z6AHgvP zqfuMFpTBwXED{#DFx;+g6TW??pImGFq*{YxS3kKH_>#3kdhjI+rbUr`J+}e)T88<8 z&s;=SchmURv;d#_)`a)+!f`y9i^gjX&ia1L4t~tda;1hg^FmSN6?e$~|660aW*i4w z@;rFb|Hb&!c-45^xWl+ARv4RwbM^+tdc@ksHrNa8IreztWP7mP+iqjU;HmFbYmoW5 zwKu%>H86j+8``n>_pvHi!@m@NB)%nnP5csg^glj+Tzpx4VSEmD`3J>&#n#6=L1#V# z>-e9nPvCXngUqv;t(ogG7sKa3S?2J}gv4r*|b*B2IaqGnLZCb2iBx3(+ksc(-YGN;jF^;>4s?? zUI#u)y@7KJwx+I6U1nUAIw$d}nJ`DjUcs3HJIp=J{;}Uut5apLNSMhM3GHB!@K5rm z%M zTW7mRxHH{xux9Axc66Iso2@6TyYRAqaNcyDwAVQIT5m$DVk0(y*Er>gZO*&|w%rn^ z;9P~?vEyJj5VN-=KCrJ(Y;rom&*I;ShKYR>9i8UZEXPg!`d)6DR10-a`y$5_Zvz7r>tl>zI6s08U-HX^wy-Vl$&E49iy}k#mP?k zI8hTIr>rG)Xf}xR>&P0CB3w_$_-||=HJ}-b^2-X13rWw&m-O|YsY2q1O4mrMChRXu zhvNnqQ;>%*Jt5Wcl^yg`>d-5QwWM_Zu&Kt`qyZ&`^G=d+7PVNmkoAg<6G+n!%MweB zHk5_%F%2WU76yhK(&}GLc_8kagBzUg;h|q zGD%e_4=5^XX+Tj)WdTJ6v6(2}N9AOLG?-f$CDd-51|?Uh&UZ236((1MC6r88sKmu| zClOqmB0q^9e34I3d9V$Yo2a-2)M9j#Ooxm@KapxZ-_H@1t~BNmt9Z~L3kaitSW&ks z7|j?*Qu9Eo4mMQ%$JDWuZG}>=ncskx>AA4?x4TAL*AP zN_zqak%}NXDx9>_A~)41ccg&^yTK0NtSYSFZrz+~;JaYc{^88Yg~bE$SjNceTd53j zH@qwt9YDn?ufP?d_&(g)%BiZ}i}EJds#p%0SE*gW?}QRPZv*Pn zDL4O$UQ9o%Ni2Wqk4raN5;&^Ub$QQA3iEKpgLWD<9lPHEHI$NkA6?ovRH82zbX=rN4GiCAL;I~+#u;L@IS3CjXTd#aZV2D5ot z+GtKW%37__jB>G)|}$UbV1o#HjPBYb1UdIu)ia z@S3vzZ-|8!T=l=XGX@L2`kz#YTFce{p!zc#bl-WL!T`ogsQNFeZXzt{Ka&2UJXUVi zQ~!Y;$6saCzftv{jyBT2@|#BglyV9do%DC9?@wjl6K|DLq4NJDb~Cdw^POR>YH&_9~Sv*YF_Pb@Y^Y3XDB`go3sys2ge7>8A%I zHhoHT9(V&4Dg7Ky^|cN4W2sWUvY>ueggS;PHM!O|k&Y{AePVp#AHpHzrGp*gL=HsJ z?%KumJGoP`#GqeEKQ?t{U8hjIBmI_ghv{|YTli1{?L7L~$}z_a=(W(Or1K|S=IlBY z+uHJ{OM1xas zYV#tl_PlZ|?O@EEKaaChzM$dqoN5b7_qcC~?5uB5zd!u|>ItmNq|4VxX+!92H-KfA zJpS}mSo9Rw1@yg9YWy?71vG?=Oqa`tkqr+DipVTbyNRq>A_u9=qMk{;J9pObT*)~& z2SeLPRpwtnmYxjb1%|tFOqF0593~S{(zbEd0H6C6Yo_zrfbFQ$gil#Z(nKkAI$Mf< z{8P(eflyin@0kk=wOi?y@D+A$6J8F}pQQH16<&_hpYbVLN7A3B{*5$Q&eNZ566=lf z3ZWH?!4aFQn5-06%%OfIqMDA`SPNZdf$gbVzk%Z8BJsh`5qoi_BS&K`nvB@Ai>S@Ospt_=l1Eddjx5SAE?uatQH2P306*#c z1+3(wZJ|>9gMctu$Pq_|iB^eN6P*regLM{ar4F3zLd_JM5vDyKko4BI7q}7eHpI{f z!!0tWk1!O@J5b-CH>D4x$^}Oktcp+r=@$QFgwv`pJ~mA3PkkYL3XQgTrz^0% z?SgzKp|=#yUQ}3Eya%<3f0&NOmc6-Sb2O;gcTh*}&`|~as}0U8SWa(VPB&OVZ+c4Z z&>ZbbDJOT}!ZFlw!GXy>pR8~+{frc?PE%OfJl3Dia+WWQxaFc=S22+?Ljnx~IG_ec zDv-e-E}&y_$7kO0ii>7Pd|@0F2`-ugQ9kf0)|KeoTw@GXg0G-C@{XeR7~3q?k1o*- zGx6=jwpBhknx9PO+3LD~4K4yY@HHrmqt??@1%i{Zr>hHONX#{wpfZ5~6`Ywonrm5% zg=-8E75T++>N~l);Hf14fA8$jGJj@%&b*WPHnSu1QRcPGinMs*3I5qHqO#e*pOt(y%OegpaXqZW6 zEbm|Mckf5w?YRM(+aeEXel9duzO-y(+KNEAr-f zhkLWVY2E~HlsClN-|Oe~^tyT-yjETlFXLf^OaBeY|NHcp@Hp^Z`i=DV^t0)0>4(zy zVg=x)^fl?rVXJUndVTujbZvTddPTY-U4r$1e4Ji53*HFErAMR(r}sXZo_)P=F|q9cX&qXMEEQ?8s{FCq!y&| zQgc$%QsYx2a1uiQRIgN5_%LXZYLrT*%;ew6U*OB&^W+EcXRsX}4IYC}gFBNqC$C9v zN?w#aJ9%ny9o7q$!){`6avuB|&Pq;Bj)CUH{>gok-IJY@ZIVrsnPdV!4*zg}bicwH z!n^Kk?hEdd?!)fA?(Oak(5=|$p6{-APr^xy$GBB))?Mfx=^o-v$Ek}Wv3@YX?d|U6 zc5qv|jop-M!NTBI=R0Wbe~8l)m{cR9B>*E*L&J^dW#G^lqU=d6Hl#3jyr z=Wyp>X9{#RhBN^P z@Tzb@;>^U!iJHW!#Ii(bVo@R=r##L`OvEb3L5ckmeG=Ug9TTnKPcaRxkALmo?C}&V5 z_k`EQ=2&fVvEKAo{O9;L@z3J#$KSxJ)6?+7cwhXE_)YPv#5vw4lV$-D>_EvK66%+>G!vD91)FA#^Bv&_ln7;~t(KfFP7 zH#?hc%%)}rt5bUHkJyi~uVSCX-i^Hme~?eYKg7MU+iBG%j-xON^p^#;3%n%oqQDCR z&kH;!@T|Zy0#6G(CGe!c69U@=9v65_;8B4`1RfT6NZ>&MNOM%P`vvY3*eYq{lTrRLl z;4*3&0*474Dlk{z z5P>-Yvjq+om?bb%V1~eSfoTF$1*Qm07MLV3QDB0=c!6;OV+F@P4-U_XHY0{sQ{73e3hk3e66J_5Z3dI|It=poQuU~hqL z0(%K`71&dti$G_AP68bTIta8EXeZECpp8IlfmQ-71zHF+7icEXRG^8#9s-R88VNKM zXdsXg@C4EVDS@PbE8qwu1Z;u0fF)oG!~_fhT|i^d{uTH~;BSGy1pXBGL*RFT-voXY z_(kAnfu96^6!<~ldx7r+z7_aJ;A?@e1ilpbLSTo$=K`Mzd@AsXz{dg~34AEjJL{yejaDz{>*L1zr+(QQ!rE=LMb!F26>f%62;6*x!WY=N@`&Jfefpr44 z0yP5F0&4}<2png{bbaz_4v*z<6^F-gcr=GAIb6Zvat@E;a2bbH99D8z!C^UvOF1m# zu$03rhb0^qbGU@V#T*uKxQN4r94_Fnki+>L&f~Cv!U_2t9?4-IhevRDIEROEcqoT+ zIXr~JIULUB@L&#SaX6F185~aMa2khGIh?}bWDX~BIFZ8%9FFI39EW2$9K+#g4o7h~ zlEV=k4(D(fh2w^DIE2H4I2_F3fgB#d;UEt8=Wrm0`*Apc!~PuZ%V9qb_u;TFhkZEg z&0#MNdve%=!|ojJ&0#kV_o8rYR|-e$N#V#Y6b|W3;lNH54(Lc>uMQlxr?6W)3Olsr z5F6yW-o7=5tvGDSVG9nMbJ&c-rW`ima1Ra}bJ&Q(h8#BFFvFooVcRr?ty2`XOmgT_ z*wmr0NrJ*XYziC1DQskMXmS{%Fm0GI-AP0K*B^{MsAYc7{E+!F^D)){Ud=q8c_Q;r z<{rrY*Jn0oHsCyfGa&h|%^aPn%#^@8U|wcUW?E)^W<=&dNd3JsT{G=7Ei#QD^PAq^ z@E7>4_cMe$>e;6zbCVOMNp^)_V z!OnhXuZ`Cfa(=?o(|_PRfv+Itzngw7{Q@iy9)^s6J3I_tnckQ_9}@ma>FV?`>8f-V z^8JzNL(iE=gux2PvElJH!9iBQkH6=ARH7qp<)(t&UT~cjR%~B0gPRdCB37vqi zlb^!#!RyHvlTRfdNp4MUN!|$Shf9+eB+pEqoUDQ0!ez}7P16n2bNT!o)b2cOW@n^boT`KQdsF$ zxW#TE^a5tPQ=u6!9KIFyb$hydy6xQNZbR2~W6odB&#>D6%y}QS@GrrV{ZV*7yu-Q4 zx!SqRxe!L>r#Q9Fu`qNlbD&KMZ-_H-F5_rth%?aX>+J1xa#}l0U=3@-F5~ya4~Z`m zAH!e6tBL0mPb3~n+yl=I*C#e7HYCnVoRK&&u{LpZqB2pESdhp|%t=g3j8BY69GK{z z=#}W2XrE}2Xp~4MO#5&97x;Pj-2MO_6}Q{Zz`o;t`%e32`xj`{KxoL@lWFK#$SuS0Lzev`M3-Z-9$Th>3; zudpTAVSNY>jW1iz;zWiAth=mRtZQ*D!^PG))@j!9)^XMftK3>*&9@G>4z{Mi2gNXW zZ|rCFu)0`nt!7pO%drgePxB}9Yx7g{J@a+*Mfh`k#N29bF>f@lGA}hRFwZnkHfzjP z<}$O?Tx8~(bD=9T5ndh-GWRq4;B1GEW-D_KGi}CW|Kf~??_*!!oQJn#uf(2|m+EvxB7u&kmLvJUhr5JUhr5JUf6w1>Ki5cy^FAcy^FAcy^FA zcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FA zcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FA zcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FAcy^FA zj+4e(EpV*BDuH7Jjuu!cutH$Dz)=Fr1gZoo1u6u}1(phw36u(C1xf^p1(pab7AO)} zB(P9mfk2_ae1Ula1p@g3M+)Q#93gPHz+nQ13d|KaL|~4uwCFKffof{5O`kTIe}*do)LIj;3OtR%LO(GTqba-z(#=$0+$F}EO3#)g#s4{oG);mz_|kF2%If&mcW?; z>jlmbI9=d0fl~!e5ja`kB!LqJP7pX=V4Xm%K#f4Pz*>Pd0>=rg7C2U5mB29qM+>YJ zSRt@n;3$D*0#yQ)0u=(~0!szT1WE<60wn^)0!suI3ls?~5?Cm(K%h`yzQ8?bflpufPr0{sN`5$G$> zN1(SrFM*x{Jp{T7>@CnuU@w8L0(%N{5$G(?NuZ-Z2Z8ni?F8Biv=L}6&`O}CKnsE9 z0?h=P3N#VeL!hxhBY}nj4Foa*oYe5ldt<#`o(mcLuJqaIWzeecmG)9!rJljw z_ zU$YV9rpIF!#>(Lzf1g+*;|t?aW0SGgILtWEXs!RHzp3A&pP`rOll2}jw*TB0tJ>9& zDYP<4DJT6ZsOtLYWcBSUm^pyp*anV}0W_yTG1y0N+zXD9I(a}hSva!u z!EuMxrY25&B3Xr}Tbs-~Y z^*oe7+Ri?LV-s>9L+DTr(10ce0Ma)golK!a>1YT_m-aXp>0}5UN=I|>{qyNrPqjML zkU6w6D53;WozBI;bpmoBgXmB$P^cyr0Md`abC5Z7=s8HonivSdu@vQyRkSK6r+1x; zfomk3FOX$)r%r4G2rHcF=mf*yWj+)I-vHEyETmO^@M=hFTLID=IIU{PGFq7>;by4d zONi7oYD@Oesat+jiTT?$!c9g2GRWdx{gG}Bk4=6y=urR znyVEg%UJ=6R|qFN&)TzwjH9_P2dsRmfa2u1lbwS+$v!%or<^UIIE8SsqrpmM(uy^r zMjs)Z>=3JcO<*~#>w$WG5OK0St;GVfo*BUaZRzLOd0hQr6IA=LsYC^`MT`m}1o9h?{K&w%zWm1G$44gC>c^L}NXW&I(@5k*X4duPG#o=;$kf0KL#X_Ca4GQqK<&sVTh$Jq zK2rRLhwfYqxqX}NT0>^p{x2t#NBEpaaDL_tsUh?1!Gpz{NQjfi9(6`!_^$AE#JduA zlSy|yKXUI1t4R$Rbk}j>WYN8= zrZ@owkyUq4P+h}cuf}OpLpI$(4zQvo$6pL+q~q{5$(mce&8UY>ZyB10?6`d=26$Jb zFpT?(&^)`b;`SC=&1%Ssd*{Z@$KAWJ;P&!xH(7A2yK}xwJo++(thNIa_#lG%O~FV` zR@>^gm$R+2x>@vSAR?cn{?b-Cd6 zahleU>9+FNM)NEBEAaNhtB+W0N8K!Vo$%_(Vmrusr&r$&ubynRclGL9;nkCk_J6}ab9V>5A&8)a z`|)ZUfJe2zZ=vQRIPSv7F#`_Y(MiMsYF&4z>06u@H6FN?^9DX|hXdqvE$V}8eeOkVt<>IT5+ryUG1{JK>AAd|2I57 zkNp2{&72Sa|6?;k!*O_)L zZR)hI4ctZPICTi;7STbZLBv_=Ih|`sv|#y>^1$~~4t)IYuX&_}A%LOVWm# za*}1Se-vCe4$e1_A4wl7KT4HD<#I7_!M9f}$scNpMrpK4>LWOAMLr~lgz}jI4mcN} zvN;AW9GOu|l8BnZQrZYQ*e!^FXEAajnIx2xxY}l>qH;|Bz%>swBB>-)BRX1+cnHBU z1^JLf63R!8eIp);f$KoD6v-r^mhxSJ6Q3UkXAhJZ@+?KEkT1CEgy3k45=ll;CCcQU z+9?+Umy3KNE~e^q#;pCP)4P@g7Ul1??y<6UX(wxc=5(ti5k~c($YJXd0=%DE&1*@R zQR`sr(1wGo{h{5hmgE?f4d(i}(=sCjvbo#pQcF^eTDqZR@-mAfIzv(LooThJC7DLO zC_m9haICX>*OFYL9@kHy=`bAuT9D@qulV9i-F6u zy48{#^#5aMjlGH-NhS(%^bfNRj=sU}SL{h}nPDzE?1L5>q+E)D>mhK(a$M4(C@mKQ z7yX6|aOHkO#6qJvy0jk!-_htbI`~wt3C=eRBH(F-VMPOv-=ga9$@vPw5w}{^tOker z2;ozS9V!W(tg##`2gf2+Jv}NwE@@^|mgi#NqTRAp;8Hcl-M(|FP!xQft?o6)fKN&6 z;snayv5ZpSh7;_Xqrt77Ptvh#8AQO-3iVr=tDhv%&SfqJuI9*TMctgRZ7EE=e`z!U z&+@uF*i;lA-d!|O;5n);5B3#>2N9Hoqu^?m)#bq!sPM>M=)d5ps>_4jP*oq^5B(im zFO}d?eH2@Yxy{`OfqlfUkzYkFKTf7b2qNJ50_!Q|;88t+lhBwxg5xuAEUm+V=VlJs JU47g7{{S7bJ8A#` literal 0 HcmV?d00001 diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/GNU AFFERO GPL V3 b/GNU AFFERO GPL V3 new file mode 100644 index 0000000..dba13ed --- /dev/null +++ b/GNU AFFERO GPL V3 @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/PKG-INFO b/PKG-INFO new file mode 100644 index 0000000..e848787 --- /dev/null +++ b/PKG-INFO @@ -0,0 +1,80 @@ +Metadata-Version: 1.1 +Name: PyMuPDF +Version: 1.17.4 +Author: Ruikai Liu +Author-email: lrk700@gmail.com +Maintainer: Jorj X. McKie +Maintainer-email: jorj.x.mckie@outlook.de +Home-page: https://github.com/pymupdf/PyMuPDF +Download-url: https://github.com/pymupdf/PyMuPDF +Summary: PyMuPDF is a Python binding for the PDF rendering library MuPDF +Description: + Release date: July 31, 2020 + + Authors + ======= + + * Jorj X. McKie + * Ruikai Liu + + Introduction + ============ + + This is **version 1.17.4 of PyMuPDF**, a Python binding for `MuPDF `_ - "a lightweight PDF and XPS viewer". + + MuPDF can access files in PDF, XPS, OpenXPS, epub, comic and fiction book formats, and it is known for both, its top performance and high rendering quality. + + With PyMuPDF you therefore can access files with extensions ``*.pdf``, ``*.xps``, ``*.oxps``, ``*.epub``, ``*.cbz`` or ``*.fb2`` from your Python scripts. A number of popular image formats is supported as well, including multi-page TIFF images. + + PyMuPDF should run on all platforms that are supported by both, MuPDF and Python. These include, but are not limited to, Windows (XP/SP2 and up), Mac OSX and Linux, 32-bit or 64-bit. If you can generate MuPDF on a Python supported platform, then also PyMuPDF can be used there. + + PyMuPDF is hosted on `GitHub `_ where you find up-to-date information of its features, our `issue tracker `_, `Wikis `_ and much more. + + Installation + ============ + + For all MS Windows versions as well as popular Max OSX and Linux versions, we are providing Python wheels - see the download section of this site and the current `release directory `_ of our home page. Other platforms need to download and generate the MuPDF library first and then set up PyMuPDF. Do visit our GitHub home, which has more details on this, including latest bugfixes, pre-releases, etc. + + Usage and Documentation + ======================== + + For all document types you can render pages in raster (PNG) or vector (SVG) formats, extract text and access meta information, links, annotations and bookmarks, as well as decrypt the document. For PDF files, these objects can also be created, modified or deleted. Plus you can rotate, re-arrange, duplicate, create, or delete pages and join or split documents. + + Starting with version 1.16.0, PDF password protection is **fully supported**: passwords, encryption methods and permission levels can be set, changed or removed. + + Specifically for PDF files, PyMuPDF provides update access to low-level structure information, supports handling of embedded files and modification of page contents (like inserting images, fonts, text, annotations and drawings). + + Other features include embedding vector images (SVG, PDF) such as logos or watermarks, joining or splitting single PDF pages (including things like posterizing and 2-up / 4-up processing). + + You can also create **PDF Form fields** with support for text, checkbox, listbox and combobox widgets. + + Our home page provides many examples and How-Tos for all of this. At a minimum, read the tutorial and the the recipes sections of our documentation. + + Written using **Sphinx**, documentation is available here: + + * View it online at `Read The Docs `_. For **best quality downloads**, use the following links. + + * `HTML `_ + + * `Windows CHM `_ + + * `PDF `_ + + +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Console +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+) +Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) +Classifier: Operating System :: MacOS +Classifier: Operating System :: Microsoft :: Windows +Classifier: Operating System :: POSIX :: Linux +Classifier: Programming Language :: C +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Topic :: Utilities diff --git a/README.md b/README.md new file mode 100644 index 0000000..084c078 --- /dev/null +++ b/README.md @@ -0,0 +1,106 @@ +# PyMuPDF 1.17.4 + +![logo](https://github.com/pymupdf/PyMuPDF/blob/master/demo/pymupdf.jpg) + +Release date: July 31, 2020 + +**Travis-CI:** [![Build Status](https://travis-ci.org/JorjMcKie/py-mupdf.svg?branch=master)](https://travis-ci.org/JorjMcKie/py-mupdf) + +On **[PyPI](https://pypi.org/project/PyMuPDF)** since August 2016: [![](https://pepy.tech/badge/pymupdf)](https://pepy.tech/project/pymupdf) + +# Authors +* [Jorj X. McKie](mailto:jorj.x.mckie@outlook.de) +* [Ruikai Liu](mailto:lrk700@gmail.com) + +# Introduction + +This is **version 1.17.4 of PyMuPDF**, a Python binding with support for [MuPDF 1.17.*](http://mupdf.com/) - "a lightweight PDF, XPS, and E-book viewer". + +MuPDF can access files in PDF, XPS, OpenXPS, CBZ, EPUB and FB2 (e-books) formats, and it is known for its top performance and high rendering quality. + +With PyMuPDF you can access files with extensions like ".pdf", ".xps", ".oxps", ".cbz", ".fb2" or ".epub". In addition, about 10 popular image formats can also be opened and handled like documents. + + +# Usage and Documentation +For all supported document types (i.e. **_including images_**) you can +* decrypt the document +* access meta information, links and bookmarks +* render pages in raster formats (PNG and some others), or the vector format SVG +* search for text +* extract text and images +* convert to other formats: PDF, (X)HTML, XML, JSON, text + +> To some degree, PyMuPDF can therefore be used as an [image converter](https://github.com/pymupdf/PyMuPDF/wiki/How-to-Convert-Images): it can read a range of input formats and can produce **Portable Network Graphics (PNG)**, **Portable Anymaps** (**PNM**, etc.), **Portable Arbitrary Maps (PAM)**, **Adobe Postscript** and **Adobe Photoshop** documents, making the use of other graphics packages obselete in these cases. But interfacing with e.g. PIL/Pillow for image input and output is easy as well. + +**PDF documents** can be created, joined or split up. Pages can be inserted, deleted, re-arranged or modified in many ways (including annotations and form fields). + +* Images and fonts can be extracted or inserted. +* Embedded files are fully supported. +* PDFs can be reformatted to support double-sided printing, posterizing, applying logos or watermarks +* Password protection is fully supported: decryption, encryption, encryption method selection, permmission level and user / owner password setting. +* Low-level PDF structures can be accessed and modified. +* PyMuPDF can also be used as a **module in the command line** using ``"python -m fitz ..."``. This is a versatile utility, which we will further develop going forward. It currently supports PDF document + + - **encryption / decryption / optimization** + - creating **sub-documents** + - document **joining** + - **image / font extraction** + - full support of **embedded files**. + + +Have a look at the basic [demos](https://github.com/pymupdf/PyMuPDF-Utilities/tree/master/demo), the [examples](https://github.com/pymupdf/PyMuPDF-Utilities/tree/master/examples) (which contain complete, working programs), and the **recipes** section of our [Wiki](https://github.com/pymupdf/PyMuPDF/wiki) sidebar, which contains more than a dozen of guides in How-To-style. + +Our **documentation**, written using Sphinx, is available in various formats from the following sources. It currently is a combination of a reference guide and a user manual. For a **quick start** look at the [tutorial](https://pymupdf.readthedocs.io/en/latest/tutorial/) and the [recipes](https://pymupdf.readthedocs.io/en/latest/faq/) chapters. + +* You can view it online at [Read the Docs](https://readthedocs.org/projects/pymupdf/). This site also provides download options for zipped HTML and PDF. +* Find a Windows help file [here](https://github.com/pymupdf/PyMuPDF-optional-material/tree/master/doc/PyMuPDF.chm). + + +# Installation + +For the major **Windows** and (thanks to our user **@jbarlow83**!) **Mac OSX** or **Linux** versions we offer wheels in the [download section of PyPI](https://pypi.org/project/PyMuPDF/#files). This includes Python 2.7 and version Python 3.5 through 3.8. + +For other Python versions or operating systems you need to generate PyMuPDF yourself as follows. This should work for all platforms which support Python and MuPDF. In any case you need the development version of Python. + +To do this, you must download and generate MuPDF. This process depends very much on your system. For most platforms, the MuPDF source contains prepared procedures for achieving this. Please observe the following general steps: + +* Be sure to download the official MuPDF source release from [here](https://mupdf.com/downloads/archive). + +* Do **not use** MuPDF's [GitHub repo](https://github.com/ArtifexSoftware/mupdf). It contains their current **development source**, which is **not compatible** with this PyMuPDF version. + +* This repo's `fitz` folder contains one or more files whose names start with a single underscore `"_"`. These files contain configuration data and hotfixes. Each one must be copy-renamed to its correct target location **inside the MuPDF source** that you have downloaded, **before you generate MuPDF**. Currently, these files are: + - fitz configuration file `_config.h` copy-replace to: `mupdf/include/mupdf/fitz/config.h`. It contains configuration data like e.g. which fonts to support. + + - Now MuPDF can be generated. + +* Since PyMuPDF v1.14.17, the sources provided in this repository **no longer contain** the interface files ``fitz.py`` and ``fitz.wrap.c`` - they are instead generated **"on the fly"** by ``setup.py`` using the interface generator [SWIG](http://www.swig.org/). So you need SWIG being installed on your system. Please refer to issue #312 for some background. + - PyMuPDF wheels have been generated using **SWIG v4.0.1**. + + +* If you do **not use SWIG**, please download the **sources from PyPI** - they continue to contain those generated files, so installation should work like any other Python extension generation on your system. + +Once this is done, adjust directories in ``setup.py`` and run ``python setup.py install``. + +The following sections contain further comments for some platforms. + +## Ubuntu +Our users (thanks to **@gileadslostson** and **@jbarlow83**!) have documented their MuPDF installation experiences from sources in this [Wiki page](https://github.com/pymupdf/PyMuPDF/wiki/Ubuntu-Installation-Experience). + +## OSX +First, install the MuPDF headers and libraries, which are provided by mupdf-tools: ``brew install mupdf-tools``. + +Then you might need to ``export ARCHFLAGS='-arch x86_64'``, since ``libmupdf.a`` is for x86_64 only. + +Finally, please double check ``setup.py`` before building. Update ``include_dirs`` and ``library_dirs`` if necessary. + +## MS Windows +If you are looking to make your own binary, consult this [Wiki page](https://github.com/pymupdf/PyMuPDF/wiki/Windows-Binaries-Generation). It explains how to use Visual Studio for generating MuPDF in quite some detail. + +# Earlier Versions +Earlier versions are available in the [releases](https://github.com/pymupdf/PyMuPDF/releases) directory. + +# License +PyMuPDF is distributed under GNU GPL V3. Because you will implicitely also be using MuPDF, its license GNU AFFERO GPL V3 applies as well. Copies of both are included in this repository. + +# Contact +Please submit questions, comments or issues [here](https://github.com/pymupdf/PyMuPDF/issues), or directly contact the authors via their e-mail addresses. diff --git a/demo/pymupdf.jpg b/demo/pymupdf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..184a2d6a3c959eebec0603b03611f3850c9e5b76 GIT binary patch literal 10729 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 literal 0 HcmV?d00001 diff --git a/docs/PyMuPDF.ico b/docs/PyMuPDF.ico new file mode 100644 index 0000000000000000000000000000000000000000..db1809d4523c79eec485bcd9e1091ba87128c290 GIT binary patch literal 3262 zcmb7{2~bl>8pq%0?#{S7TjO{;>d2xf$b^U_dEBQ13Z;&YiaH92f}9})5KvLpTD7)j zw`RQ&B@phAa0@7qlY{`dNFF2{5y1lokyTe#3#{eaj?6G&QEK+3yVL#kd;ed*{`%`q zFzh4rv9Q2UxeP1*6vLKa7-o$!GGU%5o9sVdA*f=?zwT-fNiv!{650m8Q@-4;dgH4a z_ffv}RgCX!9X%o+PM6**5x4z1rD=CbgaR$Uu2`a=b;7z%*hm1404FUtYrt6zxC-o* zuvQ7nl<=7XzLSmU1+{Wv<1~p`8?A!+IYrs_vWHopy z-ky=&qbOj$0-|M)b%MHCC8u@j8fzolpE-2H=1%bI1J}k!sC&-uKK6eJ9_`?!0h@L} zFZi^PClm3PD1p{CagSd$O=8xDp`kiRH|pFCzIxbl9~^G+CvV?A2A&#lSA&ffl!E$a z4P2p6v_b`rtrPwHidiM6b#^sWg><}f>jFOmY%#(<0Mu=L`uesv;H3o*4LG!elN#tP zgPYV~tpcaE|5LxdDuj6D-UD0o;MWOz-s!K2JGc1-*mr<+2UroXS_i8LSfzm#?XW=s z-Td3rhG^Chi6xR|g-m6T6a6h651TbT#wKy7;k8FEZ0#~3kp4$==2(O#`HX^CAViDy zu2@npl$a_aNu5|)E0#TJEJX;E^nx0-;BK>!FA@nSA<{OTprJnh^p0DRq??g;R}U@M za;_ci9``hYf42#-7vMLaFI>4h%;yc9XnVj=45Ad*Hb_?t(pv{(TAqZr4u!T12epnI zl#d*0dG@y^eJ8(GExbFa-&j|ED|q>>@U^TcyR2yY%lj4(Wvnpcgx5U?=mGy82n6`U zYO61H1Z^7wR|C-WKpdTWCkntHA-ns>yaz9njc>^#aHW}W>j5VvP?g}YmS*Fz%WSQyF1`uer2NEzVyCm80PReNAD763qf1_3pl3ovZGi}&t%82jJg zh+(^*gPk5IYH(2iFU6UYMCBynzaW@YR=A~vm2xzElzb zSS((!_lIo6N<6%;up}=~`Y3{C<$>1Nym`$-&wq@r$@u>uIL93Y=iJca!9l^JL;Y_@?gNaC4)yKX8;FdO zOZ&0UEPVs^xjEY3&b}}g!@Mk(I_)|T2Cx#t!fh6^1D(I_Fztj@=XaJSkV=o^GZEEk zF8OqOq=sRi96fS0^ho%-I)=PcmWr3Ax>TNWMX{3;ZfR7Bd84p#1iYVu-wW9M8eAU% zr3-x3Z)>m8OBq&WDYQvMiP=OUkKaynt^c!IlkZyc8PuIL=MR%@KtO zI49Y$@|4S+boaV+cQodFrXwp3&!ST^W2iS`X*XhMSB~1UqH(pZ*QVEW9{Hf4(1EuW zHV|;OrB5UjRHizXF|5l|sP9LZh2G=_l1<0W5!b>=tZ0gg=-bc>e)^vfE*-GW096t> zno^NaSk7Eu8ne2TX~RvhD`Ap3@#NxoauI`E7*8&UBj?k}xpXo+mYfr7pA$#Pj-#0) zu1AovV<<|be-C^O;H?K|1FY|Y@8#W-{u0YIl9u+mo2iv&yvkE(Cf}tv@lLpKPq=ea zJ&IF3IH*kVC`$GyJ{^FfFNZ-z+u#%;;~0q*Llx@>R}28j2&7(cH$aAr&^Ojh>Wf5T zkyI{e)itS&()NC-cA(kttVz`))fi>Efo9!+w0%H^jM{_iMSa_ zV$o@x+8%ww?f$#v_wQEpG*qeiccj9fPVGsGc_~qJmYr}d2>E^f;rV&N^K(PyvqKi< z1TV@C`!YAiHb0)qX5dqZn^EK}I^IGIpaW|vnXApLH))Jj=XP*o*ObIsmY)saFl>wH z8>Tjpf&@IDiBBQ2BFQX<6Vjil^C1hGsOob&xlzmSaIVOEUr7{1QH*7AB5fuDt*ERh zJ64<{I=erlHq$OqbyuC+&O5e9P+u+U9BS?yDvq_{B+<Ude9JEEzkM@}Ut2c22#Dsw1cse?UrtAV9e&QU VtIX{E`8m@!(*F2;`j9>s{tIQ5X9WNN literal 0 HcmV?d00001 diff --git a/docs/algebra.rst b/docs/algebra.rst new file mode 100644 index 0000000..bc38195 --- /dev/null +++ b/docs/algebra.rst @@ -0,0 +1,199 @@ +.. _Algebra: + +Operator Algebra for Geometry Objects +====================================== + +.. highlight:: python + +Instances of classes :ref:`Point`, :ref:`IRect`, :ref:`Rect` and :ref:`Matrix` are collectively also called "geometry" objects. + +They all are special cases of Python sequences, see :ref:`SequenceTypes` for more background. + +We have defined operators for these classes that allow dealing with them (almost) like ordinary numbers in terms of addition, subtraction, multiplication, division, and some others. + +This chapter is a synopsis of what is possible. + +General Remarks +----------------- +1. Operators can be either **binary** (i.e. involving two objects) or **unary**. + +2. The resulting type of **binary** operations is either a **new object of the left operand's class** or a bool. + +3. The result of **unary** operations is either a **new object** of the same class, a bool or a float. + +4. The binary operators *+, -, *, /* are defined for all classes. They *roughly* do what you would expect -- **except, that the second operand ...** + + - may always be a number which then performs the operation on every component of the first one, + - may always be a numeric sequence of the same length (2, 4 or 6) -- we call such sequences :data:`point_like`, :data:`rect_like` or :data:`matrix_like`, respectively. + +5. Rectangles support additional binary operations: **intersection** (operator *"&"*), **union** (operator *"|"*) and **containment** checking. + +6. Binary operators fully support in-place operations, so expressions like *"a /= b"* are valid if b is numeric or "a_like". + + +Unary Operations +------------------ + +=========== =================================================================== +Oper. Result +=========== =================================================================== + bool(OBJ) is false exactly if all components of OBJ are zero + abs(OBJ) the rectangle area -- equal to norm(OBJ) for the other tyes + norm(OBJ) square root of the component squares (Euclidean norm) + +OBJ new copy of OBJ + -OBJ new copy of OBJ with negated components + ~m inverse of matrix "m", or the null matrix if not invertible +=========== =================================================================== + + +Binary Operations +------------------ +For every geometry object "a" and every number "b", the operations "a ° b" and "a °= b" are always defined for the operators *+, -, *, /*. The respective operation is simply executed for each component of "a". If the **second operand is not a number**, then the following is defined: + +========= ======================================================================= +Oper. Result +========= ======================================================================= +a+b, a-b component-wise execution, "b" must be "a-like". +a*m, a/m "a" can be a point, rectangle or matrix, but "m" must be + :data:`matrix_like`. *"a/m"* is treated as *"a*~m"* (see note below + for non-invertible matrices). If "a" is a **point** or a **rectangle**, + then *"a.transform(m)"* is executed. If "a" is a matrix, then + matrix concatenation takes place. +a&b **intersection rectangle:** "a" must be a rectangle and + "b" :data:`rect_like`. Delivers the **largest rectangle** + contained in both operands. +a|b **union rectangle:** "a" must be a rectangle, and "b" may be + :data:`point_like` or :data:`rect_like`. + Delivers the **smallest rectangle** containing both operands. +b in a if "b" is a number, then *"b in tuple(a)"* is returned. + If "b" is :data:`point_like` or :data:`rect_like`, then "a" + must be a rectangle, and *"a.contains(b)"* is returned. +a == b *True* if *bool(a-b)* is *False* ("b" may be "a-like"). +========= ======================================================================= + + +.. note:: Please note an important difference to usual arithmetics: + + Matrix multiplication is **not commutative**, i.e. in general we have *m*n != n*m* for two matrices. Also, there are non-zero matrices which have no inverse, for example *m = Matrix(1, 0, 1, 0, 1, 0)*. If you try to divide by any of these you will receive a *ZeroDivisionError* exception using operator *"/"*, e.g. for *fitz.Identity / m*. But if you formulate *fitz.Identity * ~m*, the result will be *fitz.Matrix()* (the null matrix). + + Admittedly, this represents an inconsistency, and we are considering to remove it. For the time being, you can choose to avoid an exception and check whether ~m is the null matrix, or accept a potential *ZeroDivisionError* by using *fitz.Identity / m*. + + +Some Examples +-------------- + +Manipulation with numbers +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +For the usual arithmetic operations, numbers are always allowed as second operand. In addition, you can formulate *"x in OBJ"*, where x is a number. It is implemented as *"x in tuple(OBJ)"*:: + + >>> fitz.Rect(1, 2, 3, 4) + 5 + fitz.Rect(6.0, 7.0, 8.0, 9.0) + >>> 3 in fitz.Rect(1, 2, 3, 4) + True + >>> + +The following will create the upper left quarter of a document page rectangle:: + + >>> page.rect + Rect(0.0, 0.0, 595.0, 842.0) + >>> page.rect / 2 + Rect(0.0, 0.0, 297.5, 421.0) + >>> + +The following will deliver the **middle point of a line** connecting two points **p1** and **p2**:: + + >>> p1 = fitz.Point(1, 2) + >>> p2 = fitz.Point(4711, 3141) + >>> mp = p1 + (p2 - p1) / 2 + >>> mp + Point(2356.0, 1571.5) + >>> + +Manipulation with "like" Objects +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The second operand of a binary operation can always be "like" the left operand. "Like" in this context means "a sequence of numbers of the same length". With the above examples:: + + >>> p1 + p2 + Point(4712.0, 3143.0) + >>> p1 + (4711, 3141) + Point(4712.0, 3143.0) + >>> p1 += (4711, 3141) + >>> p1 + Point(4712.0, 3143.0) + >>> + +To shift a rectangle for 5 pixels to the right, do this:: + + >>> fitz.Rect(100, 100, 200, 200) + (5, 0, 5, 0) # add 5 to the x coordinates + Rect(105.0, 100.0, 205.0, 200.0) + >>> + +Points, rectangles and matrices can be *transformed* with matrices. In PyMuPDF, we treat this like a **"multiplication"** (or resp. **"division"**), where the second operand may be "like" a matrix. Division in this context means "multiplication with the inverted matrix":: + + >>> m = fitz.Matrix(1, 2, 3, 4, 5, 6) + >>> n = fitz.Matrix(6, 5, 4, 3, 2, 1) + >>> p = fitz.Point(1, 2) + >>> p * m + Point(12.0, 16.0) + >>> p * (1, 2, 3, 4, 5, 6) + Point(12.0, 16.0) + >>> p / m + Point(2.0, -2.0) + >>> p / (1, 2, 3, 4, 5, 6) + Point(2.0, -2.0) + >>> + >>> m * n # matrix multiplication + Matrix(14.0, 11.0, 34.0, 27.0, 56.0, 44.0) + >>> m / n # matrix division + Matrix(2.5, -3.5, 3.5, -4.5, 5.5, -7.5) + >>> + >>> m / m # result is equal to the Identity matrix + Matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0) + >>> + >>> # look at this non-invertible matrix: + >>> m = fitz.Matrix(1, 0, 1, 0, 1, 0) + >>> ~m + Matrix(0.0, 0.0, 0.0, 0.0, 0.0, 0.0) + >>> # we try dividing by it in two ways: + >>> p = fitz.Point(1, 2) + >>> p * ~m # this delivers point (0, 0): + Point(0.0, 0.0) + >>> p / m # but this is an exception: + Traceback (most recent call last): + File "", line 1, in + p / m + File "... /site-packages/fitz/fitz.py", line 869, in __truediv__ + raise ZeroDivisionError("matrix not invertible") + ZeroDivisionError: matrix not invertible + >>> + + +As a specialty, rectangles support additional binary operations: + +* **intersection** -- the common area of rectangle-likes, operator *"&"* +* **inclusion** -- enlarge to include a point-like or rect-like, operator *"|"* +* **containment** check -- whether a point-like or rect-like is inside + +Here is an example for creating the smallest rectangle enclosing given points:: + + >>> # first define some point-likes + >>> points = [] + >>> for i in range(10): + for j in range(10): + points.append((i, j)) + >>> + >>> # now create a rectangle containing all these 100 points + >>> # start with an empty rectangle + >>> r = fitz.Rect(points[0], points[0]) + >>> for p in points[1:]: # and include remaining points one by one + r |= p + >>> r # here is the to be expected result: + Rect(0.0, 0.0, 9.0, 9.0) + >>> (4, 5) in r # this point-like lies inside the rectangle + True + >>> # and this rect-like is also inside + >>> (4, 4, 5, 5) in r + True + >>> + diff --git a/docs/annot.rst b/docs/annot.rst new file mode 100644 index 0000000..c7a143a --- /dev/null +++ b/docs/annot.rst @@ -0,0 +1,418 @@ + +.. _Annot: + +================ +Annot +================ +**This class is supported for PDF documents only.** + +Quote from the :ref:`AdobeManual`: "An annotation associates an object such as a note, sound, or movie with a location on a page of a PDF document, or provides a way to interact with the user by means of the mouse and keyboard." + +There is a parent-child relationship between an annotation and its page. If the page object becomes unusable (closed document, any document structure change, etc.), then so does every of its existing annotation objects -- an exception is raised saying that the object is "orphaned", whenever an annotation property or method is accessed. + + +=============================== ============================================================== +**Attribute** **Short Description** +=============================== ============================================================== +:meth:`Annot.blendMode` return the annotation's blend mode +:meth:`Annot.setBlendMode` set the annotation's blend mode +:meth:`Annot.delete_responses` delete all responding annotions +:meth:`Annot.fileGet` return attached file content +:meth:`Annot.fileInfo` return attached file information +:meth:`Annot.fileUpd` set attached file new content +:meth:`Annot.getPixmap` image of the annotation as a pixmap +:meth:`Annot.setBorder` change the border +:meth:`Annot.setColors` change the colors +:meth:`Annot.setFlags` change the flags +:meth:`Annot.setInfo` change various properties +:meth:`Annot.setLineEnds` set line ending styles +:meth:`Annot.setName` change the "Name" field (e.g. icon name) +:meth:`Annot.setOpacity` change transparency +:meth:`Annot.setRect` change the rectangle +:meth:`Annot.setRotation` change rotation +:meth:`Annot.update` apply accumulated annot changes +:attr:`Annot.border` border details +:attr:`Annot.colors` border / background and fill colors +:attr:`Annot.flags` annotation flags +:attr:`Annot.info` various information +:attr:`Annot.lineEnds` start / end appearance of line-type annotations +:attr:`Annot.next` link to the next annotation +:attr:`Annot.opacity` the annot's transparency +:attr:`Annot.parent` page object of the annotation +:attr:`Annot.rect` rectangle containing the annotation +:attr:`Annot.type` type of the annotation +:attr:`Annot.vertices` point coordinates of Polygons, PolyLines, etc. +:attr:`Annot.xref` the PDF :data:`xref` number +=============================== ============================================================== + +**Class API** + +.. class:: Annot + + .. index:: + pair: matrix; getPixmap + pair: colorspace; getPixmap + pair: alpha; getPixmap + + .. method:: getPixmap(matrix=fitz.Identity, colorspace=fitz.csRGB, alpha=False) + + Creates a pixmap from the annotation as it appears on the page in untransformed coordinates. The pixmap's :ref:`IRect` equals *Annot.rect.irect* (see below). + + :arg matrix_like matrix: a matrix to be used for image creation. Default is the *fitz.Identity* matrix. + + :arg colorspace: a colorspace to be used for image creation. Default is *fitz.csRGB*. + :type colorspace: :ref:`Colorspace` + + :arg bool alpha: whether to include transparency information. Default is *False*. + + :rtype: :ref:`Pixmap` + + .. note:: If the annotation has just been created or modified, you should reload the page first via *page = doc.reload_page(page)*. + + .. method:: setInfo(info=None, content=None, title=None, creationDate=None, modDate=None, subject=None) + + *(Changed in version 1.16.10)* + + Changes annotation properties. These include dates, contents, subject and author (title). Changes for *name* and *id* will be ignored. The update happens selectively: To leave a property unchanged, set it to *None*. To delete existing data, use an empty string. + + :arg dict info: a dictionary compatible with the *info* property (see below). All entries must be strings. If this argument is not a dictionary, the other arguments are used instead -- else they are ignored. + :arg str content: *(new in v1.16.10)* see description in :attr:`info`. + :arg str title: *(new in v1.16.10)* see description in :attr:`info`. + :arg str creationDate: *(new in v1.16.10)* date of annot creation. If given, should be in PDF datetime format. + :arg str modDate: *(new in v1.16.10)* date of last modification. If given, should be in PDF datetime format. + :arg str subject: *(new in v1.16.10)* see description in :attr:`info`. + + .. method:: setLineEnds(start, end) + + Sets an annotation's line ending styles. Each of these annotation types is defined by a list of points which are connected by lines. The symbol identified by *start* is attached to the first point, and *end* to the last point of this list. For unsupported annotation types, a no-operation with a warning message results. + + .. note:: + + * While only 'FreeText', 'Line', 'PolyLine', and 'Polygon' annotations can have these properties, (Py-) MuPDF does not support line ends for 'FreeText', because the call-out variant for these is not supported. + * *(Changed in v1.16.16)* Some symbols have an interior area (diamonds, circles, squares, etc.). By default, these areas are filled with the fill color of the annotation. If this is *None*, then white is chosen. The *fill_color* argument of :meth:`Annot.update` can now be used to override this. + + :arg int start: The symbol number for the first point. + :arg int end: The symbol number for the last point. + + .. method:: setOpacity(value) + + Set the annotation's transparency. Opacity can also be set in :meth:`Annot.update`. + + :arg float value: a float in range *[0, 1]*. Any value outside is assumed to be 1. E.g. a value of 0.5 sets the transparency to 50%. + + Three overlapping 'Circle' annotations with each opacity set to 0.5: + + .. image:: images/img-opacity.jpg + + .. method:: blendMode() + + *(New in v1.16.14)* Return the annotation's blend mode. See :ref:`AdobeManual`, page 520 for explanations. + + :rtype: str + :returns: the blend mode or *None*. + + >>> annot=page.firstAnnot + >>> annot.blendMode() + 'Multiply' + + + .. method:: setBlendMode(blend_mode) + + *(New in v1.16.14)* Set the annotation's blend mode. See :ref:`AdobeManual`, page 520 for explanations. The blend mode can also be set in :meth:`Annot.update`. + + :arg str blend_mode: set the blend mode. Use :meth:`Annot.update` to reflect this in the visual appearance. For predefined values see :ref:`BlendModes`. The best way to **remove** a special blend mode is choosing ``PDF_BM_Normal``. + + >>> annot.setBlendMode(fitz.PDF_BM_Multiply) + >>> annot.update() + >>> # or in one statement: + >>> annot.update(blend_mode=fitz.PDF_BM_Multiply, ...) + + .. method:: setName(name) + + *(New in version 1.16.0)* Change the name field of any annotation type. For 'FileAttachment' and 'Text' annotations, this is the icon name, for 'Stamp' annotations the text in the stamp. The visual result (if any) depends on your PDF viewer. See also :ref:`mupdficons`. + + :arg str name: the new name. + + .. caution:: If you set the name of a 'Stamp' annotation, then this will **not change** the rectangle, nor will the text be layouted in any way. If you choose a standard text from :ref:`StampIcons` (the **exact** name piece after "STAMP_"), you should receive the original layout. An **arbitrary text** will not be changed to upper case, but be written in font "Times-Bold" as is, horizontally centered in **one line** and be shortened to fit. To get your text fully displayed, its length using fontsize 20 must not exceed 190 pixels. So please make sure that the following inequality is true: ``fitz.getTextlength(text, fontname="tibo", fontsize=20) <= 190``. + + .. method:: setRect(rect) + + Change the rectangle of an annotation. The annotation can be moved around and both sides of the rectangle can be independently scaled. However, the annotation appearance will never get rotated, flipped or sheared. + + :arg rect_like rect: the new rectangle of the annotation (finite and not empty). E.g. using a value of *annot.rect + (5, 5, 5, 5)* will shift the annot position 5 pixels to the right and downwards. + + .. note:: You **need not** invoke :meth:`Annot.update` for activation of the effect. + + + .. method:: setRotation(angle) + + Set the rotation of an annotation. This rotates the annotation rectangle around its center point. Then a **new annotation rectangle** is calculated from the resulting quad. + + :arg int angle: rotation angle in degrees. Arbitrary values are possible, but will be clamped to the interval 0 <= angle < 360. + + .. note:: + * You **must invoke** :meth:`Annot.update` to activate the effect. + * For PDF_ANNOT_FREE_TEXT, only one of the values 0, 90, 180 and 270 is possible and will **rotate the text** inside the current rectangle (which remains unchanged). Other values are silently ignored and replaced by 0. + * Otherwise, only the following :ref:`AnnotationTypes` can be rotated: 'Square', 'Circle', 'Caret', 'Text', 'FileAttachment', 'Ink', 'Line', 'Polyline', 'Polygon', and 'Stamp'. For all others the method is a no-op. + + + .. method:: setBorder(border=None, width=0, style=None, dashes=None) + + PDF only: Change border width and dashing properties. + + *Changed in version 1.16.9:* Allow specification without using a dictionary. The direct parameters are used if *border* is not a dictionary. + + :arg dict border: a dictionary as returned by the :attr:`border` property, with keys *"width"* (*float*), *"style"* (*str*) and *"dashes"* (*sequence*). Omitted keys will leave the resp. property unchanged. To e.g. remove dashing use: *"dashes": []*. If dashes is not an empty sequence, "style" will automatically be set to "D" (dashed). + + :arg float width: see above. + :arg str style: see above. + :arg sequence dashes: see above. + + .. method:: setFlags(flags) + + Changes the annotation flags. Use the *|* operator to combine several. + + :arg int flags: an integer specifying the required flags. + + .. method:: setColors(colors=None, stroke=None, fill=None) + + Changes the "stroke" and "fill" colors for supported annotation types. + + *Changed in version 1.16.9:* Allow colors to be directly set. These parameters are used if *colors* is not a dictionary. + + :arg dict colors: a dictionary containing color specifications. For accepted dictionary keys and values see below. The most practical way should be to first make a copy of the *colors* property and then modify this dictionary as required. + :arg sequence stroke: see above. + :arg sequence fill: see above. + + + .. method:: delete_responses() + + *(New in version 1.16.12)* Delete annotations referring to this one. This includes any 'Popup' annotations and all annotations responding to it. + + + .. index:: + pair: blend_mode; update + pair: fontsize; update + pair: text_color; update + pair: border_color; update + pair: fill_color; update + pair: cross_out; update + pair: rotate; update + + .. method:: update(opacity=None, blend_mode=None, fontsize=0, text_color=None, border_color=None, fill_color=None, cross_out=True, rotate=-1) + + Synchronize the appearance of an annotation with its properties after any changes. + + You can safely omit this method **only** for the following changes: + + * :meth:`setRect` + * :meth:`setFlags` + * :meth:`fileUpd` + * :meth:`setInfo` (except any changes to *"content"*) + + All arguments are optional. *(Changed in v1.16.14)* Blend mode and opacity are applicable to **all annotation types**. The other arguments are mostly special use, as described below. + + Color specifications may be made in the usual format used in PuMuPDF as sequences of floats ranging from 0.0 to 1.0 (including both). The sequence length must be 1, 3 or 4 (supporting GRAY, RGB and CMYK colorspaces respectively). For mono-color, just a float is also acceptable and yields some shade of gray. + + :arg float opacity: *(new in v1.16.14)* **valid for all annotation types:** change or set the annotation's transparency. Valid values are *0 <= opacity < 1*. + :arg str blend_mode: *(new in v1.16.14)* **valid for all annotation types:** change or set the annotation's blend mode. For valid values see :ref:`BlendModes`. + :arg float fontsize: change font size of the text. 'FreeText' annotations only. + :arg sequence,float text_color: change the text color. 'FreeText' annotations only. + :arg sequence,float border_color: change the border color. 'FreeText' annotations only. + :arg sequence,float fill_color: the fill color. + + * 'FreeText' annotations: If you set (or leave) this to *None*, then **no rectangle at all** will be drawn around the text, and the border color will be ignored. This will leave anything "under" the text visible. + * 'Line', 'Polyline', 'Polygon' annotations: use it to give applicable line end symbols a fill color other than that of the annotation *(changed in v1.16.16)*. + + :arg bool cross_out: *(new in v1.17.2)* add two diagonal lines to the annotation rectangle. 'Redact' annotations only. If not desired, *False* must be specified even if the annotation was created with *False*. + :arg int rotate: new rotation value. Default (-1) means no change. Supports 'FreeText' and several other annotation types (see :meth:`Annot.setRotation`), [#f1]_. Only choose 0, 90, 180, or 270 degrees for 'FreeText'. Otherwise any integer is acceptable. + + :rtype: bool + + + .. method:: fileInfo() + + Basic information of the annot's attached file. + + :rtype: dict + :returns: a dictionary with keys *filename*, *ufilename*, *desc* (description), *size* (uncompressed file size), *length* (compressed length) for FileAttachment annot types, else *None*. + + .. method:: fileGet() + + Returns attached file content. + + :rtype: bytes + :returns: the content of the attached file. + + .. index:: + pair: buffer; fileUpd + pair: filename; fileUpd + pair: ufilename; fileUpd + pair: desc; fileUpd + + .. method:: fileUpd(buffer=None, filename=None, ufilename=None, desc=None) + + Updates the content of an attached file. All arguments are optional. No arguments lead to a no-op. + + :arg bytes|bytearray|BytesIO buffer: the new file content. Omit to only change meta-information. + + *(Changed in version 1.14.13)* *io.BytesIO* is now also supported. + + :arg str filename: new filename to associate with the file. + + :arg str ufilename: new unicode filename to associate with the file. + + :arg str desc: new description of the file content. + + .. attribute:: opacity + + The annotation's transparency. If set, it is a value in range *[0, 1]*. The PDF default is *1.0*. However, in an effort to tell the difference, we return *-1.0* if not set. + + :rtype: float + + .. attribute:: parent + + The owning page object of the annotation. + + :rtype: :ref:`Page` + + .. attribute:: rotation + + The annot rotation. + + :rtype: int + :returns: a value [-1, 359]. If rotation is not at all, -1 is returned (and implies a rotation angle of 0). Other possible values are normalized to some value value 0 <= angle < 360. + + .. attribute:: rect + + The rectangle containing the annotation. + + :rtype: :ref:`Rect` + + .. attribute:: next + + The next annotation on this page or None. + + :rtype: *Annot* + + .. attribute:: type + + A number and one or two strings describing the annotation type, like **[2, 'FreeText', 'FreeTextCallout']**. The second string entry is optional and may be empty. See the appendix :ref:`AnnotationTypes` for a list of possible values and their meanings. + + :rtype: list + + .. attribute:: info + + A dictionary containing various information. All fields are optional strings. If an information is not provided, an empty string is returned. + + * *name* -- e.g. for 'Stamp' annotations it will contain the stamp text like "Sold" or "Experimental", for other annot types you will see the name of the annot's icon here ("PushPin" for FileAttachment). + + * *content* -- a string containing the text for type *Text* and *FreeText* annotations. Commonly used for filling the text field of annotation pop-up windows. + + * *title* -- a string containing the title of the annotation pop-up window. By convention, this is used for the **annotation author**. + + * *creationDate* -- creation timestamp. + + * *modDate* -- last modified timestamp. + + * *subject* -- subject. + + * *id* -- *(new in version 1.16.10)* a unique identification of the annotation. This is taken from PDF key */NM*. Annotations added by PyMuPDF will have a unique name, which appears here. + + :rtype: dict + + + .. attribute:: flags + + An integer whose low order bits contain flags for how the annotation should be presented. + + :rtype: int + + .. attribute:: lineEnds + + A pair of integers specifying start and end symbol of annotations types 'FreeText', 'Line', 'PolyLine', and 'Polygon'. *None* if not applicable. For possible values and descriptions in this list, see the :ref:`AdobeManual`, table 8.27 on page 630. + + :rtype: tuple + + .. attribute:: vertices + + A list containing a variable number of point ("vertices") coordinates (each given by a pair of floats) for various types of annotations: + + * 'Line' -- the starting and ending coordinates (2 float pairs). + * 'FreeText' -- 2 or 3 float pairs designating the starting, the (optional) knee point, and the ending coordinates. + * 'PolyLine' / 'Polygon' -- the coordinates of the edges connected by line pieces (n float pairs for n points). + * text markup annotations -- 4 float pairs specifying the *QuadPoints* of the marked text span (see :ref:`AdobeManual`, page 634). + * 'Ink' -- list of one to many sublists of vertex coordinates. Each such sublist represents a separate line in the drawing. + + :rtype: list + + + .. attribute:: colors + + dictionary of two lists of floats in range *0 <= float <= 1* specifying the "stroke" and the interior ("fill") colors. The stroke color is used for borders and everything that is actively painted or written ("stroked"). The fill color is used for the interior of objects like line ends, circles and squares. The lengths of these lists implicitely determine the colorspaces used: 1 = GRAY, 3 = RGB, 4 = CMYK. So "[1.0, 0.0, 0.0]" stands for RGB color red. Both lists can be empty if no color is specified. + + :rtype: dict + + .. attribute:: xref + + The PDF :data:`xref`. + + :rtype: int + + .. attribute:: border + + A dictionary containing border characteristics. Empty if no border information exists. The following keys may be present: + + * *width* -- a float indicating the border thickness in points. The value is -1.0 if no width is specified. + + * *dashes* -- a sequence of integers specifying a line dash pattern. *[]* means no dashes, *[n]* means equal on-off lengths of *n* points, longer lists will be interpreted as specifying alternating on-off length values. See the :ref:`AdobeManual` page 217 for more details. + + * *style* -- 1-byte border style: **"S"** (Solid) = solid rectangle surrounding the annotation, **"D"** (Dashed) = dashed rectangle surrounding the annotation, the dash pattern is specified by the *dashes* entry, **"B"** (Beveled) = a simulated embossed rectangle that appears to be raised above the surface of the page, **"I"** (Inset) = a simulated engraved rectangle that appears to be recessed below the surface of the page, **"U"** (Underline) = a single line along the bottom of the annotation rectangle. + + :rtype: dict + + +.. _mupdficons: + +Annotation Icons in MuPDF +------------------------- +This is a list of icons referencable by name for annotation types 'Text' and 'FileAttachment'. You can use them via the *icon* parameter when adding an annotation, or use the as argument in :meth:`Annot.setName`. It is left to your discretion which item to choose when -- no mechanism will keep you from using e.g. the "Speaker" icon for a 'FileAttachment'. + +.. image:: images/mupdf-icons.jpg + + +Example +-------- +Change the graphical image of an annotation. Also update the "author" and the text to be shown in the popup window:: + + doc = fitz.open("circle-in.pdf") + page = doc[0] # page 0 + annot = page.firstAnnot # get the annotation + annot.setBorder({"dashes": [3]}) # set dashes to "3 on, 3 off ..." + + # set stroke and fill color to some blue + annot.setColors({"stroke":(0, 0, 1), "fill":(0.75, 0.8, 0.95)}) + info = annot.info # get info dict + info["title"] = "Jorj X. McKie" # set author + + # text in popup window ... + info["content"] = "I changed border and colors and enlarged the image by 20%." + info["subject"] = "Demonstration of PyMuPDF" # some PDF viewers also show this + annot.setInfo(info) # update info dict + r = annot.rect # take annot rect + r.x1 = r.x0 + r.width * 1.2 # new location has same top-left + r.y1 = r.y0 + r.height * 1.2 # but 20% longer sides + annot.setRect(r) # update rectangle + annot.update() # update the annot's appearance + doc.save("circle-out.pdf") # save + +This is how the circle annotation looks like before and after the change (pop-up windows displayed using Nitro PDF viewer): + +|circle| + +.. |circle| image:: images/img-circle.png + + +.. rubric:: Footnotes + +.. [#f1] Rotating an annotation generally also changes its rectangle. Depending on how the annotation was defined, the original rectangle in general is **not reconstructible** by setting the rotation value to zero. This information may be lost. diff --git a/docs/app1.rst b/docs/app1.rst new file mode 100644 index 0000000..4e54cda --- /dev/null +++ b/docs/app1.rst @@ -0,0 +1,162 @@ +=============================== +Appendix 1: Performance +=============================== + +We have tried to get an impression on PyMuPDF's performance. While we know this is very hard and a fair comparison is almost impossible, we feel that we at least should provide some quantitative information to justify our bold comments on MuPDF's **top performance**. + +Following are three sections that deal with different aspects of performance: + +* document parsing +* text extraction +* image rendering + +In each section, the same fixed set of PDF files is being processed by a set of tools. The set of tools varies -- for reasons we will explain in the section. + +.. |fsizes| image:: images/img-filesizes.png + +Here is the list of files we are using. Each file name is accompanied by further information: **size** in bytes, number of **pages**, number of bookmarks (**toc** entries), number of **links**, **text** size as a percentage of file size, **KB** per page, PDF **version** and remarks. **text %** and **KB index** are indicators for whether a file is text or graphics oriented. +|fsizes| +E.g. *Adobe.pdf* and *PyMuPDF.pdf* are clearly text oriented, all other files contain many more images. + + + +Part 1: Parsing +~~~~~~~~~~~~~~~~ + +How fast is a PDF file read and its content parsed for further processing? The sheer parsing performance cannot directly be compared, because batch utilities always execute a requested task completely, in one go, front to end. *pdfrw* too, has a *lazy* strategy for parsing, meaning it only parses those parts of a document that are required in any moment. + +To yet find an answer to the question, we therefore measure the time to copy a PDF file to an output file with each tool, and doing nothing else. + +**These were the tools** + +All tools are either platform independent, or at least can run both, on Windows and Unix / Linux (pdftk). + +**Poppler** is missing here, because it specifically is a Linux tool set, although we know there exist Windows ports (created with considerable effort apparently). Technically, it is a C/C++ library, for which a Python binding exists -- in so far somewhat comparable to PyMuPDF. But Poppler in contrast is tightly coupled to **Qt** and **Cairo**. We may still include it in future, when a more handy Windows installation is available. We have seen however some `analysis `_, that hints at a much lower performance than MuPDF. Our comparison of text extraction speeds also show a much lower performance of Poppler's PDF code base **Xpdf**. + +Image rendering of MuPDF also is about three times faster than the one of Xpdf when comparing the command line tools *mudraw* of MuPDF and *pdftopng* of Xpdf -- see part 3 of this chapter. + +========= ========================================================================== +Tool Description +========= ========================================================================== +PyMuPDF tool of this manual, appearing as "fitz" in reports +pdfrw a pure Python tool, is being used by rst2pdf, has interface to ReportLab +PyPDF2 a pure Python tool with a very complete function set +pdftk a command line utility with numerous functions +========= ========================================================================== + +This is how each of the tools was used: + +**PyMuPDF**: +:: + doc = fitz.open("input.pdf") + doc.save("output.pdf") + +**pdfrw**: +:: + doc = PdfReader("input.pdf") + writer = PdfWriter() + writer.trailer = doc + writer.write("output.pdf") + +**PyPDF2**: +:: + pdfmerge = PyPDF2.PdfFileMerger() + pdfmerge.append("input.pdf") + pdfmerge.write("output.pdf") + pdfmerge.close() + +**pdftk**: +:: + pdftk input.pdf output output.pdf + + +**Observations** + +.. |cpyspeed1| image:: images/img-copy-speed-1.png +.. |cpyspeed2| image:: images/img-copy-speed-2.png + +These are our run time findings (in **seconds**, please note the European number convention: meaning of decimal point and comma is reversed): + +|cpyspeed1| + +If we leave out the Adobe manual, this table looks like + +|cpyspeed2| + +PyMuPDF is by far the fastest: on average 4.5 times faster than the second best (the pure Python tool pdfrw, **chapeau pdfrw!**), and almost 20 times faster than the command line tool pdftk. + +Where PyMuPDF only requires less than 13 seconds to process all files, pdftk affords itself almost 4 minutes. + +By far the slowest tool is PyPDF2 -- it is more than 66 times slower than PyMuPDF and 15 times slower than pdfrw! The main reason for PyPDF2's bad look comes from the Adobe manual. It obviously is slowed down by the linear file structure and the immense amount of bookmarks of this file. If we take out this special case, then PyPDF2 is only 21.5 times slower than PyMuPDF, 4.5 times slower than pdfrw and 1.2 times slower than pdftk. + +If we look at the output PDFs, there is one surprise: + +Each tool created a PDF of similar size as the original. Apart from the Adobe case, PyMuPDF always created the smallest output. + +Adobe's manual is an exception: The pure Python tools pdfrw and PyPDF2 **reduced** its size by more than 20% (and yielded a document which is no longer linearized)! + +PyMuPDF and pdftk in contrast **drastically increased** the size by 40% to about 50 MB (also no longer linearized). + +So far, we have no explanation of what is happening here. + + +Part 2: Text Extraction +~~~~~~~~~~~~~~~~~~~~~~~~ +We also have compared text extraction speed with other tools. + +The following table shows a run time comparison. PyMuPDF's methods appear as "fitz (TEXT)" and "fitz (JSON)" respectively. The tool *pdftotext.exe* of the `Xpdf `_ toolset appears as "xpdf". + +* **extractText():** basic text extraction without layout re-arrangement (using *GetText(..., output = "text")*) +* **pdftotext:** a command line tool of the **Xpdf** toolset (which also is the basis of `Poppler's library `_) +* **extractJSON():** text extraction with layout information (using *GetText(..., output = "json")*) +* **pdfminer:** a pure Python PDF tool specialized on text extraction tasks + +All tools have been used with their most basic, fanciless functionality -- no layout re-arrangements, etc. + +For demonstration purposes, we have included a version of *GetText(doc, output = "json")*, that also re-arranges the output according to occurrence on the page. + +.. |textperf| image:: images/img-textperformance.png + +Here are the results using the same test files as above (again: decimal point and comma reversed): + +|textperf| + +Again, (Py-) MuPDF is the fastest around. It is 2.3 to 2.6 times faster than xpdf. + +*pdfminer*, as a pure Python solution, of course is comparatively slow: MuPDF is 50 to 60 times faster and xpdf is 23 times faster. These observations in order of magnitude coincide with the statements on this `web site `_. + +Part 3: Image Rendering +~~~~~~~~~~~~~~~~~~~~~~~~ +We have tested rendering speed of MuPDF against the *pdftopng.exe*, a command lind tool of the **Xpdf** toolset (the PDF code basis of **Poppler**). + +**MuPDF invocation using a resolution of 150 pixels (Xpdf default):** +:: + mutool draw -o t%d.png -r 150 file.pdf + +**PyMuPDF invocation:** +:: + zoom = 150.0 / 72.0 + mat = fitz.Matrix(zoom, zoom) + def ProcessFile(datei): + print "processing:", datei + doc=fitz.open(datei) + for p in fitz.Pages(doc): + pix = p.getPixmap(matrix=mat, alpha = False) + pix.writePNG("t-%s.png" % p.number) + pix = None + doc.close() + return + +**Xpdf invocation:** +:: + pdftopng.exe file.pdf ./ + +.. |renderspeed| image:: images/img-render-speed.png + +The resulting runtimes can be found here (again: meaning of decimal point and comma reversed): + +|renderspeed| + +* MuPDF and PyMuPDF are both about 3 times faster than Xpdf. + +* The 2% speed difference between MuPDF (a utility written in C) and PyMuPDF is the Python overhead. diff --git a/docs/app2.rst b/docs/app2.rst new file mode 100644 index 0000000..760810b --- /dev/null +++ b/docs/app2.rst @@ -0,0 +1,321 @@ +.. _Appendix2: + +====================================== +Appendix 2: Details on Text Extraction +====================================== +This chapter provides background on the text extraction methods of PyMuPDF. + +Information of interest are + +* what do they provide? +* what do they imply (processing time / data sizes)? + +General structure of a TextPage +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +:ref:`TextPage` is one of PyMuPDF's classes. It is normally created behind the curtain, when :ref:`Page` text extraction methods are used, but it is also available directly. In any case, an intermediate class, :ref:`DisplayList` must be created first (display lists contain interpreted pages, they also provide the input for :ref:`Pixmap` creation). Information contained in a :ref:`TextPage` has the following hierarchy. Other than its name suggests, images may optionally also be part of a text page:: + + + + + + + + + +A **text page** consists of blocks (= roughly paragraphs). + +A **block** consists of either lines and their characters, or an image. + +A **line** consists of spans. + +A **span** consists of adjacent characters with identical font properties: name, size, flags and color. + +Plain Text +~~~~~~~~~~ + +Function :meth:`TextPage.extractText` (or *Page.getText("text")*) extracts a page's plain **text in original order** as specified by the creator of the document (which may not equal a natural reading order). + +An example output:: + + >>> print(page.getText("text")) + Some text on first page. + + +BLOCKS +~~~~~~~~~~ + +Function :meth:`TextPage.extractBLOCKS` (or *Page.getText("blocks")*) extracts a page's text blocks as a list of items like:: + + (x0, y0, x1, y1, "lines in block", block_type, block_no) + +Where the first 4 items are the float coordinates of the block's bbox. The lines within each block are concatenated by a new-line character. + +This is a high-speed method with enough information to re-arrange the page's text in natural reading order where required. + +Example output:: + + >>> print(page.getText("blocks")) + [(50.0, 88.17500305175781, 166.1709747314453, 103.28900146484375, + 'Some text on first page.', 0, 0)] + + +WORDS +~~~~~~~~~~ + +Function :meth:`TextPage.extractWORDS` (or *Page.getText("words")*) extracts a page's text **words** as a list of items like:: + + (x0, y0, x1, y1, "word", block_no, line_no, word_no) + +Where the first 4 items are the float coordinates of the words's bbox. The last three integers provide some more information on the word's whereabouts. + +This is a high-speed method with enough information to extract text contained in a given rectangle. + +Example output:: + + >>> for word in page.getText("words"): + print(word) + (50.0, 88.17500305175781, 78.73200225830078, 103.28900146484375, + 'Some', 0, 0, 0) + (81.79000091552734, 88.17500305175781, 99.5219955444336, 103.28900146484375, + 'text', 0, 0, 1) + (102.57999420166016, 88.17500305175781, 114.8119888305664, 103.28900146484375, + 'on', 0, 0, 2) + (117.86998748779297, 88.17500305175781, 135.5909881591797, 103.28900146484375, + 'first', 0, 0, 3) + (138.64898681640625, 88.17500305175781, 166.1709747314453, 103.28900146484375, + 'page.', 0, 0, 4) + +HTML +~~~~ + +:meth:`TextPage.extractHTML` (or *Page.getText("html")* output fully reflects the structure of the page's *TextPage* -- much like DICT / JSON below. This includes images, font information and text positions. If wrapped in HTML header and trailer code, it can readily be displayed by an internate browser. Our above example:: + + >>> for line in page.getText("html").splitlines(): + print(line) + +
+

Some text on first page.

+
+ + +.. _HTMLQuality: + +Controlling Quality of HTML Output +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +While HTML output has improved a lot in MuPDF v1.12.0, it is not yet bug-free: we have found problems in the areas **font support** and **image positioning**. + +* HTML text contains references to the fonts used of the original document. If these are not known to the browser (a fat chance!), it will replace them with his assumptions, which probably will let the result look awkward. This issue varies greatly by browser -- on my Windows machine, MS Edge worked just fine, whereas Firefox looked horrible. + +* For PDFs with a complex structure, images may not be positioned and / or sized correctly. This seems to be the case for rotated pages and pages, where the various possible page bbox variants do not coincide (e.g. *MediaBox != CropBox*). We do not know yet, how to address this -- we filed a bug at MuPDF's site. + +To address the font issue, you can use a simple utility script to scan through the HTML file and replace font references. Here is a little example that replaces all fonts with one of the :ref:`Base-14-Fonts`: serifed fonts will become "Times", non-serifed "Helvetica" and monospaced will become "Courier". Their respective variations for "bold", "italic", etc. are hopefully done correctly by your browser:: + + import sys + filename = sys.argv[1] + otext = open(filename).read() # original html text string + pos1 = 0 # search start poition + font_serif = "font-family:Times" # enter ... + font_sans = "font-family:Helvetica" # ... your choices ... + font_mono = "font-family:Courier" # ... here + found_one = False # true if search successfull + + while True: + pos0 = otext.find("font-family:", pos1) # start of a font spec + if pos0 < 0: # none found - we are done + break + pos1 = otext.find(";", pos0) # end of font spec + test = otext[pos0 : pos1] # complete font spec string + testn = "" # the new font spec string + if test.endswith(",serif"): # font with serifs? + testn = font_serif # use Times instead + elif test.endswith(",sans-serif"): # sans serifs font? + testn = font_sans # use Helvetica + elif test.endswith(",monospace"): # monospaced font? + testn = font_mono # becomes Courier + + if testn != "": # any of the above found? + otext = otext.replace(test, testn) # change the source + found_one = True + pos1 = 0 # start over + + if found_one: + ofile = open(filename + ".html", "w") + ofile.write(otext) + ofile.close() + else: + print("Warning: could not find any font specs!") + + + +DICT (or JSON) +~~~~~~~~~~~~~~~~ + +:meth:`TextPage.extractDICT` (or *Page.getText("dict")*) output fully reflects the structure of a *TextPage* and provides image content and position details (*bbox* -- boundary boxes in pixel units) for every block and line. This information can be used to present text in another reading order if required (e.g. from top-left to bottom-right). Images are stored as *bytes* (*bytearray* in Python 2) for DICT output and base64 encoded strings for JSON output. + +For a visuallization of the dictionary structure have a look at :ref:`textpagedict`. + +Here is how this looks like:: + + { + "width": 300.0, + "height": 350.0, + "blocks": [{ + "type": 0, + "bbox": [50.0, 88.17500305175781, 166.1709747314453, 103.28900146484375], + "lines": [{ + "wmode": 0, + "dir": [1.0, 0.0], + "bbox": [50.0, 88.17500305175781, 166.1709747314453, 103.28900146484375], + "spans": [{ + "size": 11.0, + "flags": 0, + "font": "Helvetica", + "color": 0, + "text": "Some text on first page.", + "bbox": [50.0, 88.17500305175781, 166.1709747314453, 103.28900146484375] + }] + }] + }] + } + +RAWDICT +~~~~~~~~~~~~~~~~ +:meth:`TextPage.extractRAWDICT` (or *Page.getText("rawdict")*) is an **information superset of DICT** and takes the detail level one step deeper. It looks exactly like the above, except that the *"text"* items (*string*) are replaced by *"chars"* items (*list*). Each *"chars"* entry is a character *dict*. For example, here is what you would see in place of item *"text": "Text in black color."* above:: + + "chars": [{ + "origin": [50.0, 100.0], + "bbox": [50.0, 88.17500305175781, 57.336997985839844, 103.28900146484375], + "c": "S" + }, { + "origin": [57.33700180053711, 100.0], + "bbox": [57.33700180053711, 88.17500305175781, 63.4530029296875, 103.28900146484375], + "c": "o" + }, { + "origin": [63.4530029296875, 100.0], + "bbox": [63.4530029296875, 88.17500305175781, 72.61600494384766, 103.28900146484375], + "c": "m" + }, { + "origin": [72.61600494384766, 100.0], + "bbox": [72.61600494384766, 88.17500305175781, 78.73200225830078, 103.28900146484375], + "c": "e" + }, { + "origin": [78.73200225830078, 100.0], + "bbox": [78.73200225830078, 88.17500305175781, 81.79000091552734, 103.28900146484375], + "c": " " + < ... deleted ... > + }, { + "origin": [163.11297607421875, 100.0], + "bbox": [163.11297607421875, 88.17500305175781, 166.1709747314453, 103.28900146484375], + "c": "." + }], + + +XML +~~~ + +The :meth:`TextPage.extractXML` (or *Page.getText("xml")*) version extracts text (no images) with the detail level of RAWDICT:: + + >>> for line in page.getText("xml").splitlines(): + print(line) + + + + + + + + + + + + ... deleted ... + + + + + + + +.. note:: We have successfully tested `lxml `_ to interpret this output. + +XHTML +~~~~~ +:meth:`TextPage.extractXHTML` (or *Page.getText("xhtml")*) is a variation of TEXT but in HTML format, containing the bare text and images ("semantic" output):: + +
+

Some text on first page.

+
+ +.. _text_extraction_flags: + +Text Extraction Flags Defaults +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*(New in version 1.16.2)* Method :meth:`Page.getText` supports a keyword parameter *flags* *(int)* to control the amount and the quality of extracted data. The following table shows the defaults settings (flags parameter omitted or None) for each extraction variant. If you specify flags with a value other than *None*, be aware that you must set **all desired** options. A description of the respective bit settings can be found in :ref:`TextPreserve`. + +=================== ==== ==== ===== === ==== ======= ===== ====== +Indicator text html xhtml xml dict rawdict words blocks +=================== ==== ==== ===== === ==== ======= ===== ====== +preserve ligatures 1 1 1 1 1 1 1 1 +preserve whitespace 1 1 1 1 1 1 1 1 +preserve images n/a 1 1 n/a 1 1 n/a 0 +inhibit spaces 0 0 0 0 0 0 0 0 +=================== ==== ==== ===== === ==== ======= ===== ====== + +* **"json"** is handled exactly like **"dict"** and is hence left out. +* An "n/a" specification means a value of 0 and setting this bit never has any effect on the output (but an adverse effect on performance). +* If you are not interested in images when using an output variant which includes them by default, then by all means set the respective bit off: You will experience a better performance and much lower space requirements. + +To show the effect of *TEXT_INHIBIT_SPACES* have a look at this example:: + + >>> print(page.getText("text")) + H a l l o ! + Mo r e t e x t + i s f o l l o w i n g + i n E n g l i s h + . . . l e t ' s s e e + w h a t h a p p e n s . + >>> print(page.getText("text", flags=fitz.TEXT_INHIBIT_SPACES)) + Hallo! + More text + is following + in English + ... let's see + what happens. + >>> + + +Performance +~~~~~~~~~~~~ +The text extraction methods differ significantly: in terms of information they supply, and in terms of resource requirements and runtimes. Generally, more information of course means that more processing is required and a higher data volume is generated. + +.. note:: Especially images have a **very significant** impact. Make sure to exclude them (via the *flags* parameter) whenever you do not need them. To process the below mentioned 2'700 total pages with default flags settings required 160 seconds across all extraction methods. When all images where excluded, less than 50% of that time (77 seconds) were needed. + +To begin with, all methods are **very fast** in relation to other products out there in the market. In terms of processing speed, we are not aware of a faster (free) tool. Even the most detailed method, RAWDICT, processes all 1'310 pages of the :ref:`AdobeManual` in less than 5 seconds (simple text needs less than 2 seconds here). + +The following table shows average relative speeds ("RSpeed", baseline 1.00 is TEXT), taken across ca. 1400 text-heavy and 1300 image-heavy pages. + +======= ====== ===================================================================== ========== +Method RSpeed Comments no images +======= ====== ===================================================================== ========== +TEXT 1.00 no images, **plain** text, line breaks 1.00 +BLOCKS 1.00 image bboxes (only), **block** level text with bboxes, line breaks 1.00 +WORDS 1.02 no images, **word** level text with bboxes 1.02 +XML 2.72 no images, **char** level text, layout and font details 2.72 +XHTML 3.32 **base64** images, **span** level text, no layout info 1.00 +HTML 3.54 **base64** images, **span** level text, layout and font details 1.01 +DICT 3.93 **binary** images, **span** level text, layout and font details 1.04 +RAWDICT 4.50 **binary** images, **char** level text, layout and font details 1.68 +======= ====== ===================================================================== ========== + +As mentioned: when excluding all images (last column), the relative speeds are changing drastically: except RAWDICT and XML, the other methods are almost equally fast, and RAWDICT requires 40% less execution time than the **now slowest XML**. + +Look at chapter **Appendix 1** for more performance information. diff --git a/docs/app3.rst b/docs/app3.rst new file mode 100644 index 0000000..4740cd8 --- /dev/null +++ b/docs/app3.rst @@ -0,0 +1,32 @@ +.. _Appendix 3: + +================================================ +Appendix 3: Considerations on Embedded Files +================================================ +This chapter provides some background on embedded files support in PyMuPDF. + +General +---------- +Starting with version 1.4, PDF supports embedding arbitrary files as part ("Embedded File Streams") of a PDF document file (see chapter 3.10.3, pp. 184 of the :ref:`AdobeManual`). + +In many aspects, this is comparable to concepts also found in ZIP files or the OLE technique in MS Windows. PDF embedded files do, however, *not* support directory structures as does the ZIP format. An embedded file can in turn contain embedded files itself. + +Advantages of this concept are that embedded files are under the PDF umbrella, benefitting from its permissions / password protection and integrity aspects: all data, which a PDF may reference or even may be dependent on, can be bundled into it and so form a single, consistent unit of information. + +In addition to embedded files, PDF 1.7 adds *collections* to its support range. This is an advanced way of storing and presenting meta information (i.e. arbitrary and extensible properties) of embedded files. + +MuPDF Support +-------------- +After adding initial support for collections (portfolios) and */EmbeddedFiles* in MuPDF version 1.11, this support was dropped again in version 1.15. + +As a consequence, the cli utility *mutool* no longer offers access to embedded files. + +PyMuPDF -- having implemented an */EmbeddedFiles* API in response in its version 1.11.0 -- was therefore forced to change gears starting with its version 1.16.0 (we never published a MuPDF v1.15.x compatible PyMuPDF). + +We are now maintaining our own code basis supporting embedded files. This code makes use of basic MuPDF dictionary and array functions only. + +PyMuPDF Support +------------------ +We continue to support the full old API with respect to embedded files -- with only minor, cosmetic changes. + +There even also is a new function, which delivers a list of all names under which embedded data are resgistered in a PDF, :meth:`Document.embeddedFileNames`. diff --git a/docs/app4.rst b/docs/app4.rst new file mode 100644 index 0000000..4e1a3f2 --- /dev/null +++ b/docs/app4.rst @@ -0,0 +1,241 @@ +.. _Appendix 4: + +================================================ +Appendix 4: Assorted Technical Information +================================================ + +.. _Base-14-Fonts: + +PDF Base 14 Fonts +--------------------- +The following 14 builtin font names **must be supported by every PDF viewer** application. They are available as a dictionary, which maps their full names amd their abbreviations in lower case to the full font basename. Whereever a **fontname** must be provided in PyMuPDF, any **key or value** from the dictionary may be used:: + + In [2]: fitz.Base14_fontdict + Out[2]: + {'courier': 'Courier', + 'courier-oblique': 'Courier-Oblique', + 'courier-bold': 'Courier-Bold', + 'courier-boldoblique': 'Courier-BoldOblique', + 'helvetica': 'Helvetica', + 'helvetica-oblique': 'Helvetica-Oblique', + 'helvetica-bold': 'Helvetica-Bold', + 'helvetica-boldoblique': 'Helvetica-BoldOblique', + 'times-roman': 'Times-Roman', + 'times-italic': 'Times-Italic', + 'times-bold': 'Times-Bold', + 'times-bolditalic': 'Times-BoldItalic', + 'symbol': 'Symbol', + 'zapfdingbats': 'ZapfDingbats', + 'helv': 'Helvetica', + 'heit': 'Helvetica-Oblique', + 'hebo': 'Helvetica-Bold', + 'hebi': 'Helvetica-BoldOblique', + 'cour': 'Courier', + 'coit': 'Courier-Oblique', + 'cobo': 'Courier-Bold', + 'cobi': 'Courier-BoldOblique', + 'tiro': 'Times-Roman', + 'tibo': 'Times-Bold', + 'tiit': 'Times-Italic', + 'tibi': 'Times-BoldItalic', + 'symb': 'Symbol', + 'zadb': 'ZapfDingbats'} + +In contrast to their obligation, not all PDF viewers support these fonts correctly and completely -- this is especially true for Symbol and ZapfDingbats. Also, the glyph (visual) images will be specific to every reader. + +To see how these fonts can be used -- including the **CJK built-in** fonts -- look at the table in :meth:`Page.insertFont`. + +------------ + +.. _AdobeManual: + +Adobe PDF References +--------------------------- + +This PDF Reference manual published by Adobe is frequently quoted throughout this documentation. It can be viewed and downloaded from `here `_. + +There is a newer version of this, which can be found `here `_. Redaction annotations are an example contained in this one, but not in the earlier version. + +------------ + +.. _SequenceTypes: + +Using Python Sequences as Arguments in PyMuPDF +------------------------------------------------ +When PyMuPDF objects and methods require a Python **list** of numerical values, other Python **sequence types** are also allowed. Python classes are said to implement the **sequence protocol**, if they have a *__getitem__()* method. + +This basically means, you can interchangeably use Python *list* or *tuple* or even *array.array*, *numpy.array* and *bytearray* types in these cases. + +For example, specifying a sequence *"s"* in any of the following ways + +* *s = [1, 2]* +* *s = (1, 2)* +* *s = array.array("i", (1, 2))* +* *s = numpy.array((1, 2))* +* *s = bytearray((1, 2))* + +will make it usable in the following example expressions: + +* *fitz.Point(s)* +* *fitz.Point(x, y) + s* +* *doc.select(s)* + +Similarly with all geometry objects :ref:`Rect`, :ref:`IRect`, :ref:`Matrix` and :ref:`Point`. + +Because all PyMuPDF geometry classes themselves are special cases of sequences, they (with the exception of :ref:`Quad` -- see below) can be freely used where numerical sequences can be used, e.g. as arguments for functions like *list()*, *tuple()*, *array.array()* or *numpy.array()*. Look at the following snippet to see this work. + +>>> import fitz, array, numpy as np +>>> m = fitz.Matrix(1, 2, 3, 4, 5, 6) +>>> +>>> list(m) +[1.0, 2.0, 3.0, 4.0, 5.0, 6.0] +>>> +>>> tuple(m) +(1.0, 2.0, 3.0, 4.0, 5.0, 6.0) +>>> +>>> array.array("f", m) +array('f', [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]) +>>> +>>> np.array(m) +array([1., 2., 3., 4., 5., 6.]) + +.. note:: :ref:`Quad` is a Python sequence object as well and has a length of 4. Its items however are :data:`point_like` -- not numbers. Therefore, the above remarks do not apply. + +------------ + +.. _ReferenialIntegrity: + +Ensuring Consistency of Important Objects in PyMuPDF +------------------------------------------------------------ +PyMuPDF is a Python binding for the C library MuPDF. While a lot of effort has been invested by MuPDF's creators to approximate some sort of an object-oriented behavior, they certainly could not overcome basic shortcomings of the C language in that respect. + +Python on the other hand implements the OO-model in a very clean way. The interface code between PyMuPDF and MuPDF consists of two basic files: *fitz.py* and *fitz_wrap.c*. They are created by the excellent SWIG tool for each new version. + +When you use one of PyMuPDF's objects or methods, this will result in excution of some code in *fitz.py*, which in turn will call some C code compiled with *fitz_wrap.c*. + +Because SWIG goes a long way to keep the Python and the C level in sync, everything works fine, if a certain set of rules is being strictly followed. For example: **never access** a :ref:`Page` object, after you have closed (or deleted or set to *None*) the owning :ref:`Document`. Or, less obvious: **never access** a page or any of its children (links or annotations) after you have executed one of the document methods *select()*, *deletePage()*, *insertPage()* ... and more. + +But just no longer accessing invalidated objects is actually not enough: They should rather be actively deleted entirely, to also free C-level resources (meaning allocated memory). + +The reason for these rules lies in the fact that there is a hierachical 2-level one-to-many relationship between a document and its pages and also between a page and its links / annotations. To maintain a consistent situation, any of the above actions must lead to a complete reset -- in **Python and, synchronously, in C**. + +SWIG cannot know about this and consequently does not do it. + +The required logic has therefore been built into PyMuPDF itself in the following way. + +1. If a page "loses" its owning document or is being deleted itself, all of its currently existing annotations and links will be made unusable in Python, and their C-level counterparts will be deleted and deallocated. + +2. If a document is closed (or deleted or set to *None*) or if its structure has changed, then similarly all currently existing pages and their children will be made unusable, and corresponding C-level deletions will take place. "Structure changes" include methods like *select()*, *delePage()*, *insertPage()*, *insertPDF()* and so on: all of these will result in a cascade of object deletions. + +The programmer will normally not realize any of this. If he, however, tries to access invalidated objects, exceptions will be raised. + +Invalidated objects cannot be directly deleted as with Python statements like *del page* or *page = None*, etc. Instead, their *__del__* method must be invoked. + +All pages, links and annotations have the property *parent*, which points to the owning object. This is the property that can be checked on the application level: if *obj.parent == None* then the object's parent is gone, and any reference to its properties or methods will raise an exception informing about this "orphaned" state. + +A sample session: + +>>> page = doc[n] +>>> annot = page.firstAnnot +>>> annot.type # everything works fine +[5, 'Circle'] +>>> page = None # this turns 'annot' into an orphan +>>> annot.type +<... omitted lines ...> +RuntimeError: orphaned object: parent is None +>>> +>>> # same happens, if you do this: +>>> annot = doc[n].firstAnnot # deletes the page again immediately! +>>> annot.type # so, 'annot' is 'born' orphaned +<... omitted lines ...> +RuntimeError: orphaned object: parent is None + +This shows the cascading effect: + +>>> doc = fitz.open("some.pdf") +>>> page = doc[n] +>>> annot = page.firstAnnot +>>> page.rect +fitz.Rect(0.0, 0.0, 595.0, 842.0) +>>> annot.type +[5, 'Circle'] +>>> del doc # or doc = None or doc.close() +>>> page.rect +<... omitted lines ...> +RuntimeError: orphaned object: parent is None +>>> annot.type +<... omitted lines ...> +RuntimeError: orphaned object: parent is None + +.. note:: Objects outside the above relationship are not included in this mechanism. If you e.g. created a table of contents by *toc = doc.getToC()*, and later close or change the document, then this cannot and does not change variable *toc* in any way. It is your responsibility to refresh such variables as required. + +------------ + +.. _FormXObject: + +Design of Method :meth:`Page.showPDFpage` +-------------------------------------------- + +Purpose and Capabilities +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The method displays an image of a ("source") page of another PDF document within a specified rectangle of the current ("containing", "target") page. + +* **In contrast** to :meth:`Page.insertImage`, this display is vector-based and hence remains accurate across zooming levels. +* **Just like** :meth:`Page.insertImage`, the size of the display is adjusted to the given rectangle. + +The following variations of the display are currently supported: + +* Bool parameter *keep_proportion* controls whether to maintain the aspect ratio (default) or not. +* Rectangle parameter *clip* restricts the visible part of the source page rectangle. Default is the full page. +* float *rotation* rotates the display by an arbitrary angle (degrees). If the angle is not an integer multiple of 90, only 2 of the 4 corners may be positioned on the target border if also *keep_proportion* is true. +* Bool parameter *overlay* controls whether to put the image on top (foreground, default) of current page content or not (background). + +Use cases include (but are not limited to) the following: + +1. "Stamp" a series of pages of the current document with the same image, like a company logo or a watermark. +2. Combine arbitrary input pages into one output page to support “booklet” or double-sided printing (known as "4-up", "n-up"). +3. Split up (large) input pages into several arbitrary pieces. This is also called “posterization”, because you e.g. can split an A4 page horizontally and vertically, print the 4 pieces enlarged to separate A4 pages, and end up with an A2 version of your original page. + +Technical Implementation +~~~~~~~~~~~~~~~~~~~~~~~~~ + +This is done using PDF **"Form XObjects"**, see section 4.9 on page 355 of :ref:`AdobeManual`. On execution of a *Page.showPDFpage(rect, src, pno, ...)*, the following things happen: + + 1. The :data:`resources` and :data:`contents` objects of page *pno* in document *src* are copied over to the current document, jointly creating a new **Form XObject** with the following properties. The PDF :data:`xref` number of this object is returned by the method. + + a. */BBox* equals */Mediabox* of the source page + b. */Matrix* equals the identity matrix *[1 0 0 1 0 0]* + c. */Resources* equals that of the source page. This involves a “deep-copy” of hierarchically nested other objects (including fonts, images, etc.). The complexity involved here is covered by MuPDF’s grafting [#f1]_ technique functions. + d. This is a stream object type, and its stream is an exact copy of the combined data of the source page's */Contents* objects. + + This step is only executed once per shown source page. Subsequent displays of the same page only create pointers (done in next step) to this object. + + 2. A second **Form XObject** is then created which the target page uses to invoke the display. This object has the following properties: + + a. */BBox* equals the */CropBox* of the source page (or *clip*). + b. */Matrix* represents the mapping of */BBox* to the target rectangle. + c. */XObject* references the previous XObject via the fixed name *fullpage*. + d. The stream of this object contains exactly one fixed statement: */fullpage Do*. + + 3. The :data:`resources` and :data:`contents` objects of the target page are now modified as follows. + + a. Add an entry to the */XObject* dictionary of */Resources* with the name *fzFrm* (with n chosen such that this entry is unique on the page). + b. Depending on *overlay*, prepend or append a new object to the page's */Contents* array, containing the statement *q /fzFrm Do Q*. + + +.. _RedirectMessages: + +Redirecting Error and Warning Messages +-------------------------------------------- +Since MuPDF version 1.16 error and warning messages can be redirected via an official plugin. + +PyMuPDF will put error messages to *sys.stderr* prefixed with the string "mupdf:". Warnings are internally stored and can be accessed via *fitz.TOOLS.mupdf_warnings()*. There also is a function to empty this store. + + +.. rubric:: Footnotes + +.. [#f1] MuPDF supports "deep-copying" objects between PDF documents. To avoid duplicate data in the target, it uses so-called "graftmaps", like a form of scratchpad: for each object to be copied, its :data:`xref` number is looked up in the graftmap. If found, copying is skipped. Otherwise, the new :data:`xref` is recorded and the copy takes place. PyMuPDF makes use of this technique in two places so far: :meth:`Document.insertPDF` and :meth:`Page.showPDFpage`. This process is fast and very efficient, because it prevents multiple copies of typically large and frequently referenced data, like images and fonts. However, you may still want to consider using garbage collection (option 4) in any of the following cases: + + 1. The target PDF is not new / empty: grafting does not check for resource types that already existed (e.g. images, fonts) in the target document + 2. Using :meth:`Page.showPDFpage` for more than one source document: each grafting occurs **within one source** PDF only, not across multiple. diff --git a/docs/changes.rst b/docs/changes.rst new file mode 100644 index 0000000..9e0e7e1 --- /dev/null +++ b/docs/changes.rst @@ -0,0 +1,751 @@ +Change Logs +=============== + +Changes in Version 1.17.4 +--------------------------- +* **Fixed** issue `#561 `_. Handling of more than 10 :ref:`Font` objects on one page should now work correctly. +* **Fixed** issue `#562 `_. Annotation pixmaps are no longer derived from the page pixmap, thus avoiding unintended inclusion of page content. +* **Fixed** issue `#559 `_. This **MuPDF** bug is being temporarily fixed with a pre-version of MuPDF's next release. +* **Added** utility function :meth:`repair_mono_font` for correcting displayed character spacing for some mono-spaced fonts. +* **Added** utility method :meth:`Document.need_appearances` for fine-controlling Form PDF behavior. Addresses issue `#563 `_. +* **Added** utility function :meth:`sRGB_to_pdf` to recover the PDF color triple for a given color integer in sRGB format. +* **Added** utility function :meth:`sRGB_to_rgb` to recover the (R, G, B) color triple for a given color integer in sRGB format. +* **Added** utility function :meth:`make_table` which delivers table cells for a given rectangle and desired numbers of columns and rows. +* **Added** support for optional fonts in repository `pymupdf-fonts `_. + +Changes in Version 1.17.3 +--------------------------- +* **Fixed** an undocumented issue, which prevented fully cleaning a PDF page when using :meth:`Page.cleanContents`. +* **Fixed** issue `#540 `_. Text extraction for EPUB should again work correctly. +* **Fixed** issue `#548 `_. Documentation now includes ``LINK_NAMED``. +* **Added** new parameter to control start of text in :meth:`TextWriter.fillTextbox`. Implements `#549 `_. +* **Changed** documentation of :meth:`Page.addRedactAnnot` to explain the usage of non-builtin fonts. + +Changes in Version 1.17.2 +--------------------------- +* **Fixed** issue `#533 `_. +* **Added** options to modify 'Redact' annotation appearance. Implements `#535 `_. + + +Changes in Version 1.17.1 +--------------------------- +* **Fixed** issue `#520 `_. +* **Fixed** issue `#525 `_. Vertices for 'Ink' annots should now be correct. +* **Fixed** issue `#524 `_. It is now possible to query and set rotation for applicable annotation types. + +Also significantly improved inline documentation for better support of interactive help. + +Changes in Version 1.17.0 +--------------------------- +This version is based on MuPDF v1.17. Following are highlights of new and changed features: + +* **Added** extended language support for annotations and widgets: a mixture of Latin, Greece, Russian, Chinese, Japanese and Korean characters can now be used in 'FreeText' annotations and text widgets. No special arrangement is required to use it. + +* Faster page access is implemented for documents supporting a "chapter" structure. This applies to EPUB documents currently. This comes with several new :ref:`Document` methods and changes for :meth:`Document.loadPage` and the "indexed" page access *doc[n]*: In addition to specifying a page number as before, a tuple *(chaper, pno)* can be specified to identify the desired page. + +* **Changed:** Improved support of redaction annotations: images overlapped by redactions are **permanantly modified** by erasing the overlap areas. Also links are removed if overlapped by redactions. This is now fully in sync with PDF specifications. + +Other changes: + +* **Changed** :meth:`TextWriter.writeText` to support the *"morph"* parameter. +* **Added** methods :meth:`Rect.morph`, :meth:`IRect.morph`, and :meth:`Quad.morph`, which return a new :ref:`Quad`. +* **Changed** :meth:`Page.addFreetextAnnot` to support text alignment via a new *"align"* parameter. +* **Fixed** issue `#508 `_. Improved image rectangle calculation to hopefully deliver correct values in most if not all cases. +* **Fixed** issue `#502 `_. +* **Fixed** issue `#500 `_. :meth:`Document.convertToPDF` should no longer cause memory leaks. +* **Fixed** issue `#496 `_. Annotations and widgets / fields are now added or modified using the coordinates of the **unrotated page**. This behavior is now in sync with other methods modifying PDF pages. +* **Added** :attr:`Page.rotationMatrix` and :attr:`Page.derotationMatrix` to support coordinate transformations between the rotated and the original versions of a PDF page. + +Potential code breaking changes: + +* The private method ``Page._getTransformation()`` has been removed. Use the public :attr:`Page.transformationMattrix` instead. + + +Changes in Version 1.16.18 +--------------------------- +This version introduces several new features around PDF text output. The motivation is to simplify this task, while at the same time offering extending features. + +One major achievement is using MuPDF's capabilities to dynamically choosing fallback fonts whenever a character cannot be found in the current one. This seemlessly works for Base-14 fonts in combination with CJK fonts (China, Japan, Korea). So a text may contain **any combination of characters** from the Latin, Greek, Russian, Chinese, Japanese and Korean languages. + +* **Fixed** issue `#493 `_. ``Pixmap(doc, xref)`` should now again correctly resemble the loaded image object. +* **Fixed** issue `#488 `_. Widget names are now modifyable. +* **Added** new class :ref:`Font` which represents a font. +* **Added** new class :ref:`TextWriter` which serves as a container for text to be written on a page. +* **Added** :meth:`Page.writeText` to write one or more :ref:`TextWriter` objects to the page. + + +Changes in Version 1.16.17 +--------------------------- + +* **Fixed** issue `#479 `_. PyMuPDF should now more correctly report image resolutions. This applies to both, images (either from images files or extracted from PDF documents) and pixmaps created from images. +* **Added** :meth:`Pixmap.setResolution` which sets the image resolution in x and y directions. + +Changes in Version 1.16.16 +--------------------------- + +* **Fixed** issue `#477 `_. +* **Fixed** issue `#476 `_. +* **Changed** annotation line end symbol coloring and fixed an error coloring the interior of 'Polyline' /'Polygon' annotations. + +Changes in Version 1.16.14 +--------------------------- + +* **Changed** text marker annotations to accept parameters beyond just quadrilaterals such that now **text lines between two given points can be marked**. + +* **Added** :meth:`Document.scrub` which **removes potentially sensitive data** from a PDF. Implements `#453 `_. + +* **Added** :meth:`Annot.blendMode` which returns the **blend mode** of annotations. + +* **Added** :meth:`Annot.setBlendMode` to set the annotation's blend mode. This resolves issue `#416 `_. +* **Changed** :meth:`Annot.update` to accept additional parameters for setting blend mode and opacity. +* **Added** advanced graphics features to **control the anti-aliasing values**, :meth:`Tools.set_aa_level`. Resolves `#467 `_ + +* **Fixed** issue `#474 `_. +* **Fixed** issue `#466 `_. + + + +Changes in Version 1.16.13 +--------------------------- + +* **Added** :meth:`Document.getPageXObjectList` which returns a list of **Form XObjects** of the page. +* **Added** :meth:`Page.setMediaBox` for changing the physical PDF page size. +* **Added** :ref:`Page` methods which have been internal before: :meth:`Page.cleanContents` (= :meth:`Page._cleanContents`), :meth:`Page.getContents` (= :meth:`Page._getContents`), :meth:`Page.getTransformation` (= :meth:`Page._getTransformation`). + + + +Changes in Version 1.16.12 +--------------------------- +* **Fixed** issue `#447 `_ +* **Fixed** issue `#461 `_. +* **Fixed** issue `#397 `_. +* **Fixed** issue `#463 `_. +* **Added** JavaScript support to PDF form fields, thereby fixing `#454 `_. +* **Added** a new annotation method :meth:`Annot.delete_responses`, which removes 'Popup' and response annotations referring to the current one. Mainly serves data protection purposes. +* **Added** a new form field method :meth:`Widget.reset`, which resets the field value to its default. +* **Changed** and extended handling of redactions: images and XObjects are removed if *contained* in a redaction rectangle. Any partial only overlaps will just be covered by the redaction background color. Now an *overlay* text can be specified to be inserted in the rectangle area to **take the place the deleted original** text. This resolves `#434 `_. + +Changes in Version 1.16.11 +--------------------------- +* **Added** Support for redaction annotations via method :meth:`Page.addRedactAnnot` and :meth:`Page.apply_redactions`. +* **Fixed** issue #426 ("PolygonAnnotation in 1.16.10 version"). +* **Fixed** documentation only issues `#443 `_ and `#444 `_. + +Changes in Version 1.16.10 +--------------------------- +* **Fixed** issue #421 ("annot.setRect(rect) has no effect on text Annotation") +* **Fixed** issue #417 ("Strange behavior for page.deleteAnnot on 1.16.9 compare to 1.13.20") +* **Fixed** issue #415 ("Annot.setOpacity throws mupdf warnings") +* **Changed** all "add annotation / widget" methods to store a unique name in the */NM* PDF key. +* **Changed** :meth:`Annot.setInfo` to also accept direct parameters in addition to a dictionary. +* **Changed** :attr:`Annot.info` to now also show the annotation's unique id (*/NM* PDF key) if present. +* **Added** :meth:`Page.annot_names` which returns a list of all annotation names (*/NM* keys). +* **Added** :meth:`Page.load_annot` which loads an annotation given its unique id (*/NM* key). +* **Added** :meth:`Document.reload_page` which provides a new copy of a page after finishing any pending updates to it. + + +Changes in Version 1.16.9 +--------------------------- +* **Fixed** #412 ("Feature Request: Allow controlling whether TOC entries should be collapsed") +* **Fixed** #411 ("Seg Fault with page.firstWidget") +* **Fixed** #407 ("Annot.setOpacity trouble") +* **Changed** methods :meth:`Annot.setBorder`, :meth:`Annot.setColors`, :meth:`Link.setBorder`, and :meth:`Link.setColors` to also accept direct parameters, and not just cumbersome dictionaries. + +Changes in Version 1.16.8 +--------------------------- +* **Added** several new methods to the :ref:`Document` class, which make dealing with PDF low-level structures easier. I also decided to provide them as "normal" methods (as opposed to private ones starting with an underscore "_"). These are :meth:`Document.xrefObject`, :meth:`Document.xrefStream`, :meth:`Document.xrefStreamRaw`, :meth:`Document.PDFTrailer`, :meth:`Document.PDFCatalog`, :meth:`Document.metadataXML`, :meth:`Document.updateObject`, :meth:`Document.updateStream`. +* **Added** :meth:`Tools.mupdf_disply_errors` which sets the display of mupdf errors on *sys.stderr*. +* **Added** a commandline facility. This a major new feature: you can now invoke several utility functions via *"python -m fitz ..."*. It should obsolete the need for many of the most trivial scripts. Please refer to :ref:`Module`. + + +Changes in Version 1.16.7 +--------------------------- +Minor changes to better synchronize the binary image streams of :ref:`TextPage` image blocks and :meth:`Document.extractImage` images. + +* **Fixed** issue #394 ("PyMuPDF Segfaults when using TOOLS.mupdf_warnings()"). +* **Changed** redirection of MuPDF error messages: apart from writing them to Python *sys.stderr*, they are now also stored with the MuPDF warnings. +* **Changed** :meth:`Tools.mupdf_warnings` to automatically empty the store (if not deactivated via a parameter). +* **Changed** :meth:`Page.getImageBbox` to return an **infinite rectangle** if the image could not be located on the page -- instead of raising an exception. + + +Changes in Version 1.16.6 +--------------------------- +* **Fixed** issue #390 ("Incomplete deletion of annotations"). +* **Changed** :meth:`Page.searchFor` / :meth:`Document.searchPageFor` to also support the *flags* parameter, which controls the data included in a :ref:`TextPage`. +* **Changed** :meth:`Document.getPageImageList`, :meth:`Document.getPageFontList` and their :ref:`Page` counterparts to support a new parameter *full*. If true, the returned items will contain the :data:`xref` of the *Form XObject* where the font or image is referenced. + +Changes in Version 1.16.5 +--------------------------- +More performance improvements for text extraction. + +* **Fixed** second part of issue #381 (see item in v1.16.4). +* **Added** :meth:`Page.getTextPage`, so it is no longer required to create an intermediate display list for text extractions. Page level wrappers for text extraction and text searching are now based on this, which should improve performance by ca. 5%. + +Changes in Version 1.16.4 +--------------------------- + +* **Fixed** issue #381 ("TextPage.extractDICT ... failed ... after upgrading ... to 1.16.3") +* **Added** method :meth:`Document.pages` which delivers a generator iterator over a page range. +* **Added** method :meth:`Page.links` which delivers a generator iterator over the links of a page. +* **Added** method :meth:`Page.annots` which delivers a generator iterator over the annotations of a page. +* **Added** method :meth:`Page.widgets` which delivers a generator iterator over the form fields of a page. +* **Changed** :attr:`Document.isFormPDF` to now contain the number of widgets, and *False* if not a PDF or this number is zero. + + +Changes in Version 1.16.3 +--------------------------- +Minor changes compared to version 1.16.2. The code of the "dict" and "rawdict" variants of :meth:`Page.getText` has been ported to C which has greatly improved their performance. This improvement is mostly noticeable with text-oriented documents, where they now should execute almost two times faster. + +* **Fixed** issue #369 ("mupdf: cmsCreateTransform failed") by removing ICC colorspace support. +* **Changed** :meth:`Page.getText` to accept additional keywords "blocks" and "words". These will deliver the results of :meth:`Page.getTextBlocks` and :meth:`Page.getTextWords`, respectively. So all text extraction methods are now available via a uniform API. Correspondingly, there are now new methods :meth:`TextPage.extractBLOCKS` and :meth:`TextPage.extractWords`. +* **Changed** :meth:`Page.getText` to default bit indicator *TEXT_INHIBIT_SPACES* to **off**. Insertion of additional spaces is **not suppressed** by default. + +Changes in Version 1.16.2 +--------------------------- +* **Changed** text extraction methods of :ref:`Page` to allow detail control of the amount of extracted data. +* **Added** :meth:`planishLine` which maps a given line (defined as a pair of points) to the x-axis. +* **Fixed** an issue (w/o Github number) which brought down the interpreter when encountering certain non-UTF-8 encodable characters while using :meth:`Page.getText` with te "dict" option. +* **Fixed** issue #362 ("Memory Leak with getText('rawDICT')"). + +Changes in Version 1.16.1 +--------------------------- +* **Added** property :attr:`Quad.isConvex` which checks whether a line is contained in the quad if it connects two points of it. +* **Changed** :meth:`Document.insertPDF` to now allow dropping or including links and annotations independently during the copy. Fixes issue #352 ("Corrupt PDF data and ..."), which seemed to intermittently occur when using the method for some problematic PDF files. +* **Fixed** a bug which, in matrix division using the syntax *"m1/m2"*, caused matrix *"m1"* to be **replaced** by the result instead of delivering a new matrix. +* **Fixed** issue #354 ("SyntaxWarning with Python 3.8"). We now always use *"=="* for literals (instead of the *"is"* Python keyword). +* **Fixed** issue #353 ("mupdf version check"), to no longer refuse the import when there are only patch level deviations from MuPDF. + + + +Changes in Version 1.16.0 +--------------------------- +This major new version of MuPDF comes with several nice new or changed features. Some of them imply programming API changes, however. This is a synopsis of what has changed: + +* PDF document encryption and decryption is now **fully supported**. This includes setting **permissions**, **passwords** (user and owner passwords) and the desired encryption method. +* In response to the new encryption features, PyMuPDF returns an integer (ie. a combination of bits) for document permissions, and no longer a dictionary. +* Redirection of MuPDF errors and warnings is now natively supported. PyMuPDF redirects error messages from MuPDF to *sys.stderr* and no longer buffers them. Warnings continue to be buffered and will not be displayed. Functions exist to access and reset the warnings buffer. +* Annotations are now **only supported for PDF**. +* Annotations and widgets (form fields) are now **separate object chains** on a page (although widgets technically still **are** PDF annotations). This means, that you will **never encounter widgets** when using :attr:`Page.firstAnnot` or :meth:`Annot.next`. You must use :attr:`Page.firstWidget` and :meth:`Widget.next` to access form fields. +* As part of MuPDF's changes regarding widgets, only the following four fonts are supported, when **adding** or **changing** form fields: **Courier, Helvetica, Times-Roman** and **ZapfDingBats**. + +List of change details: + +* **Added** :meth:`Document.can_save_incrementally` which checks conditions that are preventing use of option *incremental=True* of :meth:`Document.save`. +* **Added** :attr:`Page.firstWidget` which points to the first field on a page. +* **Added** :meth:`Page.getImageBbox` which returns the rectangle occupied by an image shown on the page. +* **Added** :meth:`Annot.setName` which lets you change the (icon) name field. +* **Added** outputting the text color in :meth:`Page.getText`: the *"dict"*, *"rawdict"* and *"xml"* options now also show the color in sRGB format. +* **Changed** :attr:`Document.permissions` to now contain an integer of bool indicators -- was a dictionary before. +* **Changed** :meth:`Document.save`, :meth:`Document.write`, which now fully support password-based decryption and encryption of PDF files. +* **Changed the names of all Python constants** related to annotations and widgets. Please make sure to consult the **Constants and Enumerations** chapter if your script is dealing with these two classes. This decision goes back to the dropped support for non-PDF annotations. The **old names** (starting with "ANNOT_*" or "WIDGET_*") will be available as deprecated synonyms. +* **Changed** font support for widgets: only *Cour* (Courier), *Helv* (Helvetica, default), *TiRo* (Times-Roman) and *ZaDb* (ZapfDingBats) are accepted when **adding or changing** form fields. Only the plain versions are possible -- not their italic or bold variations. **Reading** widgets, however will show its original font. +* **Changed** the name of the warnings buffer to :meth:`Tools.mupdf_warnings` and the function to empty this buffer is now called :meth:`Tools.reset_mupdf_warnings`. +* **Changed** :meth:`Page.getPixmap`, :meth:`Document.getPagePixmap`: a new bool argument *annots* can now be used to **suppress the rendering of annotations** on the page. +* **Changed** :meth:`Page.addFileAnnot` and :meth:`Page.addTextAnnot` to enable setting an icon. +* **Removed** widget-related methods and attributes from the :ref:`Annot` object. +* **Removed** :ref:`Document` attributes *openErrCode*, *openErrMsg*, and :ref:`Tools` attributes / methods *stderr*, *reset_stderr*, *stdout*, and *reset_stdout*. +* **Removed** **thirdparty zlib** dependency in PyMuPDF: there are now compression functions available in MuPDF. Source installers of PyMuPDF may now omit this extra installation step. + +No version published for MuPDF v1.15.0 +------------------------------------------------------ + +Changes in Version 1.14.20 / 1.14.21 +------------------------------------- +* **Changed** text marker annotations to support multiple rectangles / quadrilaterals. This fixes issue #341 ("Question : How to addhighlight so that a string spread across more than a line is covered by one highlight?") and similar (#285). +* **Fixed** issue #331 ("Importing PyMuPDF changes warning filtering behaviour globally"). + + +Changes in Version 1.14.19 +--------------------------- +* **Fixed** issue #319 ("InsertText function error when use custom font"). +* **Added** new method :meth:`Document.getSigFlags` which returns information on whether a PDF is signed. Resolves issue #326 ("How to detect signature in a form pdf?"). + + +Changes in Version 1.14.17 +--------------------------- +* **Added** :meth:`Document.fullcopyPage` to make full page copies within a PDF (not just copied references as :meth:`Document.copyPage` does). +* **Changed** :meth:`Page.getPixmap`, :meth:`Document.getPagePixmap` now use *alpha=False* as default. +* **Changed** text extraction: the span dictionary now (again) contains its rectangle under the *bbox* key. +* **Changed** :meth:`Document.movePage` and :meth:`Document.copyPage` to use direct functions instead of wrapping :meth:`Document.select` -- similar to :meth:`Document.deletePage` in v1.14.16. + +Changes in Version 1.14.16 +--------------------------- +* **Changed** :ref:`Document` methods around PDF */EmbeddedFiles* to no longer use MuPDF's "portfolio" functions. That support will be dropped in MuPDF v1.15 -- therefore another solution was required. +* **Changed** :meth:`Document.embeddedFileCount` to be a function (was an attribute). +* **Added** new method :meth:`Document.embeddedFileNames` which returns a list of names of embedded files. +* **Changed** :meth:`Document.deletePage` and :meth:`Document.deletePageRange` to internally no longer use :meth:`Document.select`, but instead use functions to perform the deletion directly. As it has turned out, the :meth:`Document.select` method yields invalid outline trees (tables of content) for very complex PDFs and sophisticated use of annotations. + + +Changes in Version 1.14.15 +--------------------------- +* **Fixed** issues #301 ("Line cap and Line join"), #300 ("How to draw a shape without outlines") and #298 ("utils.updateRect exception"). These bugs pertain to drawing shapes with PyMuPDF. Drawing shapes without any border is fully supported. Line cap styles and line line join style are now differentiated and support all possible PDF values (0, 1, 2) instead of just being a bool. The previous parameter *roundCap* is deprecated in favor of *lineCap* and *lineJoin* and will be deleted in the next release. +* **Fixed** issue #290 ("Memory Leak with getText('rawDICT')"). This bug caused memory not being (completely) freed after invoking the "dict", "rawdict" and "json" versions of :meth:`Page.getText`. + + +Changes in Version 1.14.14 +--------------------------- +* **Added** new low-level function :meth:`ImageProperties` to determine a number of characteristics for an image. +* **Added** new low-level function :meth:`Document.isStream`, which checks whether an object is of stream type. +* **Changed** low-level functions :meth:`Document._getXrefString` and :meth:`Document._getTrailerString` now by default return object definitions in a formatted form which makes parsing easy. + +Changes in Version 1.14.13 +--------------------------- +* **Changed** methods working with binary input: while ever supporting bytes and bytearray objects, they now also accept *io.BytesIO* input, using their *getvalue()* method. This pertains to document creation, embedded files, FileAttachment annotations, pixmap creation and others. Fixes issue #274 ("Segfault when using BytesIO as a stream for insertImage"). +* **Fixed** issue #278 ("Is insertImage(keep_proportion=True) broken?"). Images are now correctly presented when keeping aspect ratio. + + +Changes in Version 1.14.12 +--------------------------- +* **Changed** the draw methods of :ref:`Page` and :ref:`Shape` to support not only RGB, but also GRAY and CMYK colorspaces. This solves issue #270 ("Is there a way to use CMYK color to draw shapes?"). This change also applies to text insertion methods of :ref:`Shape`, resp. :ref:`Page`. +* **Fixed** issue #269 ("AttributeError in Document.insertPage()"), which occurred when using :meth:`Document.insertPage` with text insertion. + + +Changes in Version 1.14.11 +--------------------------- +* **Changed** :meth:`Page.showPDFpage` to always position the source rectangle centered in the target. This method now also supports **rotation by arbitrary angles**. The argument *reuse_xref* has been deprecated: prevention of duplicates is now **handled internally**. +* **Changed** :meth:`Page.insertImage` to support rotated display of the image and keeping the aspect ratio. Only rotations by multiples of 90 degrees are supported here. +* **Fixed** issue #265 ("TypeError: insertText() got an unexpected keyword argument 'idx'"). This issue only occurred when using :meth:`Document.insertPage` with also inserting text. + +Changes in Version 1.14.10 +--------------------------- +* **Changed** :meth:`Page.showPDFpage` to support rotation of the source rectangle. Fixes #261 ("Cannot rotate insterted pages"). +* **Fixed** a bug in :meth:`Page.insertImage` which prevented insertion of multiple images provided as streams. + + +Changes in Version 1.14.9 +--------------------------- +* **Added** new low-level method :meth:`Document._getTrailerString`, which returns the trailer object of a PDF. This is much like :meth:`Document._getXrefString` except that the PDF trailer has no / needs no :data:`xref` to identify it. +* **Added** new parameters for text insertion methods. You can now set stroke and fill colors of glyphs (text characters) independently, as well as the thickness of the glyph border. A new parameter *render_mode* controls the use of these colors, and whether the text should be visible at all. +* **Fixed** issue #258 ("Copying image streams to new PDF without size increase"): For JPX images embedded in a PDF, :meth:`Document.extractImage` will now return them in their original format. Previously, the MuPDF base library was used, which returns them in PNG format (entailing a massive size increase). +* **Fixed** issue #259 ("Morphing text to fit inside rect"). Clarified use of :meth:`getTextlength` and removed extra line breaks for long words. + +Changes in Version 1.14.8 +--------------------------- +* **Added** :meth:`Pixmap.setRect` to change the pixel values in a rectangle. This is also an alternative to setting the color of a complete pixmap (:meth:`Pixmap.clearWith`). +* **Fixed** an image extraction issue with JBIG2 (monochrome) encoded PDF images. The issue occurred in :meth:`Page.getText` (parameters "dict" and "rawdict") and in :meth:`Document.extractImage` methods. +* **Fixed** an issue with not correctly clearing a non-alpha :ref:`Pixmap` (:meth:`Pixmap.clearWith`). +* **Fixed** an issue with not correctly inverting colors of a non-alpha :ref:`Pixmap` (:meth:`Pixmap.invertIRect`). + +Changes in Version 1.14.7 +--------------------------- +* **Added** :meth:`Pixmap.setPixel` to change one pixel value. +* **Added** documentation for image conversion in the :ref:`FAQ`. +* **Added** new function :meth:`getTextlength` to determine the string length for a given font. +* **Added** Postscript image output (changed :meth:`Pixmap.writeImage` and :meth:`Pixmap.getImageData`). +* **Changed** :meth:`Pixmap.writeImage` and :meth:`Pixmap.getImageData` to ensure valid combinations of colorspace, alpha and output format. +* **Changed** :meth:`Pixmap.writeImage`: the desired format is now inferred from the filename. +* **Changed** FreeText annotations can now have a transparent background - see :meth:`Annot.update`. + +Changes in Version 1.14.5 +--------------------------- +* **Changed:** :ref:`Shape` methods now strictly use the transformation matrix of the :ref:`Page` -- instead of "manually" calculating locations. +* **Added** method :meth:`Pixmap.pixel` which returns the pixel value (a list) for given pixel coordinates. +* **Added** method :meth:`Pixmap.getImageData` which returns a bytes object representing the pixmap in a variety of formats. Previously, this could be done for PNG outputs only (:meth:`Pixmap.getPNGData`). +* **Changed:** output of methods :meth:`Pixmap.writeImage` and (the new) :meth:`Pixmap.getImageData` may now also be PSD (Adobe Photoshop Document). +* **Added** method :meth:`Shape.drawQuad` which draws a :ref:`Quad`. This actually is a shorthand for a :meth:`Shape.drawPolyline` with the edges of the quad. +* **Changed** method :meth:`Shape.drawOval`: the argument can now be **either** a rectangle (:data:`rect_like`) **or** a quadrilateral (:data:`quad_like`). + +Changes in Version 1.14.4 +--------------------------- +* **Fixes** issue #239 "Annotation coordinate consistency". + + +Changes in Version 1.14.3 +--------------------------- +This patch version contains minor bug fixes and CJK font output support. + +* **Added** support for the four CJK fonts as PyMuPDF generated text output. This pertains to methods :meth:`Page.insertFont`, :meth:`Shape.insertText`, :meth:`Shape.insertTextbox`, and corresponding :ref:`Page` methods. The new fonts are available under "reserved" fontnames "china-t" (traditional Chinese), "china-s" (simplified Chinese), "japan" (Japanese), and "korea" (Korean). +* **Added** full support for the built-in fonts 'Symbol' and 'Zapfdingbats'. +* **Changed:** The 14 standard fonts can now each be referenced by a 4-letter abbreviation. + +Changes in Version 1.14.1 +--------------------------- +This patch version contains minor performance improvements. + +* **Added** support for :ref:`Document` filenames given as *pathlib* object by using the Python *str()* function. + + +Changes in Version 1.14.0 +--------------------------- +To support MuPDF v1.14.0, massive changes were required in PyMuPDF -- most of them purely technical, with little visibility to developers. But there are also quite a lot of interesting new and improved features. Following are the details: + +* **Added** "ink" annotation. +* **Added** "rubber stamp" annotation. +* **Added** "squiggly" text marker annotation. +* **Added** new class :ref:`Quad` (quadrilateral or tetragon) -- which represents a general four-sided shape in the plane. The special subtype of rectangular, non-empty tetragons is used in text marker annotations and as returned objects in text search methods. +* **Added** a new option "decrypt" to :meth:`Document.save` and :meth:`Document.write`. Now you can **keep encryption** when saving a password protected PDF. +* **Added** suppression and redirection of unsolicited messages issued by the underlying C-library MuPDF. Consult :ref:`RedirectMessages` for details. +* **Changed:** Changes to annotations now **always require** :meth:`Annot.update` to become effective. +* **Changed** free text annotations to support the full Latin character set and range of appearance options. +* **Changed** text searching, :meth:`Page.searchFor`, to optionally return :ref:`Quad` instead :ref:`Rect` objects surrounding each search hit. +* **Changed** plain text output: we now add a *\n* to each line if it does not itself end with this character. +* **Fixed** issue 211 ("Something wrong in the doc"). +* **Fixed** issue 213 ("Rewritten outline is displayed only by mupdf-based applications"). +* **Fixed** issue 214 ("PDF decryption GONE!"). +* **Fixed** issue 215 ("Formatting of links added with pyMuPDF"). +* **Fixed** issue 217 ("extraction through json is failing for my pdf"). + +Behind the curtain, we have changed the implementation of geometry objects: they now purely exist in Python and no longer have "shadow" twins on the C-level (in MuPDF). This has improved processing speed in that area by more than a factor of two. + +Because of the same reason, most methods involving geometry parameters now also accept the corresponding Python sequence. For example, in method *"page.showPDFpage(rect, ...)"* parameter *rect* may now be any :data:`rect_like` sequence. + +We also invested considerable effort to further extend and improve the :ref:`FAQ` chapter. + + +Changes in Version 1.13.19 +--------------------------- +This version contains some technical / performance improvements and bug fixes. + +* **Changed** memory management: for Python 3 builds, Python memory management is exclusively used across all C-level code (i.e. no more native *malloc()* in MuPDF code or PyMuPDF interface code). This leads to improved memory usage profiles and also some runtime improvements: we have seen > 2% shorter runtimes for text extractions and pixmap creations (on Windows machines only to date). +* **Fixed** an error occurring in Python 2.7, which crashed the interpreter when using :meth:`TextPage.extractRAWDICT` (= *Page.getText("rawdict")*). +* **Fixed** an error occurring in Python 2.7, when creating link destinations. +* **Extended** the :ref:`FAQ` chapter with more examples. + +Changes in Version 1.13.18 +--------------------------- +* **Added** method :meth:`TextPage.extractRAWDICT`, and a corresponding new string parameter "rawdict" to method :meth:`Page.getText`. It extracts text and images from a page in Python *dict* form like :meth:`TextPage.extractDICT`, but with the detail level of :meth:`TextPage.extractXML`, which is position information down to each single character. + +Changes in Version 1.13.17 +--------------------------- +* **Fixed** an error that intermittently caused an exception in :meth:`Page.showPDFpage`, when pages from many different source PDFs were shown. +* **Changed** method :meth:`Document.extractImage` to now return more meta information about the extracted imgage. Also, its performance has been greatly improved. Several demo scripts have been changed to make use of this method. +* **Changed** method :meth:`Document._getXrefStream` to now return *None* if the object is no stream and no longer raise an exception if otherwise. +* **Added** method :meth:`Document._deleteObject` which deletes a PDF object identified by its :data:`xref`. Only to be used by the experienced PDF expert. +* **Added** a method :meth:`PaperRect` which returns a :ref:`Rect` for a supplied paper format string. Example: *fitz.PaperRect("letter") = fitz.Rect(0.0, 0.0, 612.0, 792.0)*. +* **Added** a :ref:`FAQ` chapter to this document. + +Changes in Version 1.13.16 +--------------------------- +* **Added** support for correctly setting transparency (opacity) for certain annotation types. +* **Added** a tool property (:attr:`Tools.fitz_config`) showing the configuration of this PyMuPDF version. +* **Fixed** issue #193 ('insertText(overlay=False) gives "cannot resize a buffer with shared storage" error') by avoiding read-only buffers. + +Changes in Version 1.13.15 +--------------------------- +* **Fixed** issue #189 ("cannot find builtin CJK font"), so we are supporting builtin CJK fonts now (CJK = China, Japan, Korea). This should lead to correctly generated pixmaps for documents using these languages. This change has consequences for our binary file size: it will now range between 8 and 10 MB, depending on the OS. +* **Fixed** issue #191 ("Jupyter notebook kernel dies after ca. 40 pages"), which occurred when modifying the contents of an annotation. + +Changes in Version 1.13.14 +--------------------------- +This patch version contains several improvements, mainly for annotations. + +* **Changed** :attr:`Annot.lineEnds` is now a list of two integers representing the line end symbols. Previously was a *dict* of strings. +* **Added** support of line end symbols for applicable annotations. PyMuPDF now can generate these annotations including the line end symbols. +* **Added** :meth:`Annot.setLineEnds` adds line end symbols to applicable annotation types ('Line', 'PolyLine', 'Polygon'). +* **Changed** technical implementation of :meth:`Page.insertImage` and :meth:`Page.showPDFpage`: they now create there own contents objects, thereby avoiding changes of potentially large streams with consequential compression / decompression efforts and high change volumes with incremental updates. + +Changes in Version 1.13.13 +--------------------------- +This patch version contains several improvements for embedded files and file attachment annotations. + +* **Added** :meth:`Document.embeddedFileUpd` which allows changing **file content and metadata** of an embedded file. It supersedes the old method :meth:`Document.embeddedFileSetInfo` (which will be deleted in a future version). Content is automatically compressed and metadata may be unicode. +* **Changed** :meth:`Document.embeddedFileAdd` to now automatically compress file content. Accompanying metadata can now be unicode (had to be ASCII in the past). +* **Changed** :meth:`Document.embeddedFileDel` to now automatically delete **all entries** having the supplied identifying name. The return code is now an integer count of the removed entries (was *None* previously). +* **Changed** embedded file methods to now also accept or show the PDF unicode filename as additional parameter *ufilename*. +* **Added** :meth:`Page.addFileAnnot` which adds a new file attachment annotation. +* **Changed** :meth:`Annot.fileUpd` (file attachment annot) to now also accept the PDF unicode *ufilename* parameter. The description parameter *desc* correctly works with unicode. Furthermore, **all** parameters are optional, so metadata may be changed without also replacing the file content. +* **Changed** :meth:`Annot.fileInfo` (file attachment annot) to now also show the PDF unicode filename as parameter *ufilename*. +* **Fixed** issue #180 ("page.getText(output='dict') return invalid bbox") to now also work for vertical text. +* **Fixed** issue #185 ("Can't render the annotations created by PyMuPDF"). The issue's cause was the minimalistic MuPDF approach when creating annotations. Several annotation types have no */AP* ("appearance") object when created by MuPDF functions. MuPDF, SumatraPDF and hence also PyMuPDF cannot render annotations without such an object. This fix now ensures, that an appearance object is always created together with the annotation itself. We still do not support line end styles. + +Changes in Version 1.13.12 +--------------------------- +* **Fixed** issue #180 ("page.getText(output='dict') return invalid bbox"). Note that this is a circumvention of an MuPDF error, which generates zero-height character rectangles in some cases. When this happens, this fix ensures a bbox height of at least fontsize. +* **Changed** for ListBox and ComboBox widgets, the attribute list of selectable values has been renamed to :attr:`Widget.choice_values`. +* **Changed** when adding widgets, any missing of the :ref:`Base-14-Fonts` is automatically added to the PDF. Widget text fonts can now also be chosen from existing widget fonts. Any specified field values are now honored and lead to a field with a preset value. +* **Added** :meth:`Annot.updateWidget` which allows changing existing form fields -- including the field value. + +Changes in Version 1.13.11 +--------------------------- +While the preceeding patch subversions only contained various fixes, this version again introduces major new features: + +* **Added** basic support for PDF widget annotations. You can now add PDF form fields of types Text, CheckBox, ListBox and ComboBox. Where necessary, the PDF is tranformed to a Form PDF with the first added widget. +* **Fixed** issues #176 ("wrong file embedding"), #177 ("segment fault when invoking page.getText()")and #179 ("Segmentation fault using page.getLinks() on encrypted PDF"). + + +Changes in Version 1.13.7 +-------------------------- +* **Added** support of variable page sizes for reflowable documents (e-books, HTML, etc.): new parameters *rect* and *fontsize* in :ref:`Document` creation (open), and as a separate method :meth:`Document.layout`. +* **Added** :ref:`Annot` creation of many annotations types: sticky notes, free text, circle, rectangle, line, polygon, polyline and text markers. +* **Added** support of annotation transparency (:attr:`Annot.opacity`, :meth:`Annot.setOpacity`). +* **Changed** :attr:`Annot.vertices`: point coordinates are now grouped as pairs of floats (no longer as separate floats). +* **Changed** annotation colors dictionary: the two keys are now named *"stroke"* (formerly *"common"*) and *"fill"*. +* **Added** :attr:`Document.isDirty` which is *True* if a PDF has been changed in this session. Reset to *False* on each :meth:`Document.save` or :meth:`Document.write`. + +Changes in Version 1.13.6 +-------------------------- +* Fix #173: for memory-resident documents, ensure the stream object will not be garbage-collected by Python before document is closed. + +Changes in Version 1.13.5 +-------------------------- +* New low-level method :meth:`Page._setContents` defines an object given by its :data:`xref` to serve as the :data:`contents` object. +* Changed and extended PDF form field support: the attribute *widget_text* has been renamed to :attr:`Annot.widget_value`. Values of all form field types (except signatures) are now supported. A new attribute :attr:`Annot.widget_choices` contains the selectable values of listboxes and comboboxes. All these attributes now contain *None* if no value is present. + +Changes in Version 1.13.4 +-------------------------- +* :meth:`Document.convertToPDF` now supports page ranges, reverted page sequences and page rotation. If the document already is a PDF, an exception is raised. +* Fixed a bug (introduced with v1.13.0) that prevented :meth:`Page.insertImage` for transparent images. + +Changes in Version 1.13.3 +-------------------------- +Introduces a way to convert **any MuPDF supported document** to a PDF. If you ever wanted PDF versions of your XPS, EPUB, CBZ or FB2 files -- here is a way to do this. + +* :meth:`Document.convertToPDF` returns a Python *bytes* object in PDF format. Can be opened like normal in PyMuPDF, or be written to disk with the *".pdf"* extension. + +Changes in Version 1.13.2 +-------------------------- +The major enhancement is PDF form field support. Form fields are annotations of type *(19, 'Widget')*. There is a new document method to check whether a PDF is a form. The :ref:`Annot` class has new properties describing field details. + +* :attr:`Document.isFormPDF` is true if object type */AcroForm* and at least one form field exists. +* :attr:`Annot.widget_type`, :attr:`Annot.widget_text` and :attr:`Annot.widget_name` contain the details of a form field (i.e. a "Widget" annotation). + +Changes in Version 1.13.1 +-------------------------- +* :meth:`TextPage.extractDICT` is a new method to extract the contents of a document page (text and images). All document types are supported as with the other :ref:`TextPage` *extract*()* methods. The returned object is a dictionary of nested lists and other dictionaries, and **exactly equal** to the JSON-deserialization of the old :meth:`TextPage.extractJSON`. The difference is that the result is created directly -- no JSON module is used. Because the user needs no JSON module to interpet the information, it should be easier to use, and also have a better performance, because it contains images in their original **binary format** -- they need not be base64-decoded. +* :meth:`Page.getText` correspondingly supports the new parameter value *"dict"* to invoke the above method. +* :meth:`TextPage.extractJSON` (resp. *Page.getText("json")*) is still supported for convenience, but its use is expected to decline. + +Changes in Version 1.13.0 +-------------------------- +This version is based on MuPDF v1.13.0. This release is "primarily a bug fix release". + +In PyMuPDF, we are also doing some bug fixes while introducing minor enhancements. There only very minimal changes to the user's API. + +* :ref:`Document` construction is more flexible: the new *filetype* parameter allows setting the document type. If specified, any extension in the filename will be ignored. More completely addresses `issue #156 `_. As part of this, the documentation has been reworked. + +* Changes to :ref:`Pixmap` constructors: + - Colorspace conversion no longer allows dropping the alpha channel: source and target **alpha will now always be the same**. We have seen exceptions and even interpreter crashes when using *alpha = 0*. + - As a replacement, the simple pixmap copy lets you choose the target alpha. + +* :meth:`Document.save` again offers the full garbage collection range 0 thru 4. Because of a bug in :data:`xref` maintenance, we had to temporarily enforce *garbage > 1*. Finally resolves `issue #148 `_. + +* :meth:`Document.save` now offers to "prettify" PDF source via an additional argument. +* :meth:`Page.insertImage` has the additional *stream* \-parameter, specifying a memory area holding an image. + +* Issue with garbled PNGs on Linux systems has been resolved (`"Problem writing PNG" #133) `_. + + +Changes in Version 1.12.4 +-------------------------- +This is an extension of 1.12.3. + +* Fix of `issue #147 `_: methods :meth:`Document.getPageFontlist` and :meth:`Document.getPageImagelist` now also show fonts and images contained in :data:`resources` nested via "Form XObjects". +* Temporary fix of `issue #148 `_: Saving to new PDF files will now automatically use *garbage = 2* if a lower value is given. Final fix is to be expected with MuPDF's next version. At that point we will remove this circumvention. +* Preventive fix of illegally using stencil / image mask pixmaps in some methods. +* Method :meth:`Document.getPageFontlist` now includes the encoding name for each font in the list. +* Method :meth:`Document.getPageImagelist` now includes the decode method name for each image in the list. + +Changes in Version 1.12.3 +-------------------------- +This is an extension of 1.12.2. + +* Many functions now return *None* instead of *0*, if the result has no other meaning than just indicating successful execution (:meth:`Document.close`, :meth:`Document.save`, :meth:`Document.select`, :meth:`Pixmap.writePNG` and many others). + +Changes in Version 1.12.2 +-------------------------- +This is an extension of 1.12.1. + +* Method :meth:`Page.showPDFpage` now accepts the new *clip* argument. This specifies an area of the source page to which the display should be restricted. + +* New :attr:`Page.CropBox` and :attr:`Page.MediaBox` have been included for convenience. + + +Changes in Version 1.12.1 +-------------------------- +This is an extension of version 1.12.0. + +* New method :meth:`Page.showPDFpage` displays another's PDF page. This is a **vector** image and therefore remains precise across zooming. Both involved documents must be PDF. + +* New method :meth:`Page.getSVGimage` creates an SVG image from the page. In contrast to the raster image of a pixmap, this is a vector image format. The return is a unicode text string, which can be saved in a *.svg* file. + +* Method :meth:`Page.getTextBlocks` now accepts an additional bool parameter "images". If set to true (default is false), image blocks (metadata only) are included in the produced list and thus allow detecting areas with rendered images. + +* Minor bug fixes. + +* "text" result of :meth:`Page.getText` concatenates all lines within a block using a single space character. MuPDF's original uses "\\n" instead, producing a rather ragged output. + +* New properties of :ref:`Page` objects :attr:`Page.MediaBoxSize` and :attr:`Page.CropBoxPosition` provide more information about a page's dimensions. For non-PDF files (and for most PDF files, too) these will be equal to :attr:`Page.rect.bottom_right`, resp. :attr:`Page.rect.top_left`. For example, class :ref:`Shape` makes use of them to correctly position its items. + +Changes in Version 1.12.0 +-------------------------- +This version is based on and requires MuPDF v1.12.0. The new MuPDF version contains quite a number of changes -- most of them around text extraction. Some of the changes impact the programmer's API. + +* :meth:`Outline.saveText` and :meth:`Outline.saveXML` have been deleted without replacement. You probably haven't used them much anyway. But if you are looking for a replacement: the output of :meth:`Document.getToC` can easily be used to produce something equivalent. + +* Class *TextSheet* does no longer exist. + +* Text "spans" (one of the hierarchy levels of :ref:`TextPage`) no longer contain positioning information (i.e. no "bbox" key). Instead, spans now provide the font information for its text. This impacts our JSON output variant. + +* HTML output has improved very much: it now creates valid documents which can be displayed by browsers to produce a similar view as the original document. + +* There is a new output format XHTML, which provides text and images in a browser-readable format. The difference to HTML output is, that no effort is made to reproduce the original layout. + +* All output formats of :meth:`Page.getText` now support creating complete, valid documents, by wrapping them with appropriate header and trailer information. If you are interested in using the HTML output, please make sure to read :ref:`HTMLQuality`. + +* To support finding text positions, we have added special methods that don't need detours like :meth:`TextPage.extractJSON` or :meth:`TextPage.extractXML`: use :meth:`Page.getTextBlocks` or resp. :meth:`Page.getTextWords` to create lists of text blocks or resp. words, which are accompanied by their rectangles. This should be much faster than the standard text extraction methods and also avoids using additional packages for interpreting their output. + + +Changes in Version 1.11.2 +-------------------------- +This is an extension of v1.11.1. + +* New :meth:`Page.insertFont` creates a PDF */Font* object and returns its object number. + +* New :meth:`Document.extractFont` extracts the content of an embedded font given its object number. + +* Methods **FontList(...)** items no longer contain the PDF generation number. This value never had any significance. Instead, the font file extension is included (e.g. "pfa" for a "PostScript Font for ASCII"), which is more valuable information. + +* Fonts other than "simple fonts" (Type1) are now also supported. + +* New options to change :ref:`Pixmap` size: + + * Method :meth:`Pixmap.shrink` reduces the pixmap proportionally in place. + + * A new :ref:`Pixmap` copy constructor allows scaling via setting target width and height. + + +Changes in Version 1.11.1 +-------------------------------- +This is an extension of v1.11.0. + +* New class *Shape*. It facilitates and extends the creation of image shapes on PDF pages. It contains multiple methods for creating elementary shapes like lines, rectangles or circles, which can be combined into more complex ones and be given common properties like line width or colors. Combined shapes are handled as a unit and e.g. be "morphed" together. The class can accumulate multiple complex shapes and put them all in the page's foreground or background -- thus also reducing the number of updates to the page's :data:`contents` object. + +* All *Page* draw methods now use the new *Shape* class. + +* Text insertion methods *insertText()* and *insertTextBox()* now support morphing in addition to text rotation. They have become part of the *Shape* class and thus allow text to be freely combined with graphics. + +* A new *Pixmap* constructor allows creating pixmap copies with an added alpha channel. A new method also allows directly manipulating alpha values. + +* Binary algebraic operations with geometry objects (matrices, rectangles and points) now generally also support lists or tuples as the second operand. You can add a tuple *(x, y)* of numbers to a :ref:`Point`. In this context, such sequences are called ":data:`point_like`" (resp. :data:`matrix_like`, :data:`rect_like`). + +* Geometry objects now fully support in-place operators. For example, *p /= m* replaces point p with *p * 1/m* for a number, or *p * ~m* for a :data:`matrix_like` object *m*. Similarly, if *r* is a rectangle, then *r |= (3, 4)* is the new rectangle that also includes *fitz.Point(3, 4)*, and *r &= (1, 2, 3, 4)* is its intersection with *fitz.Rect(1, 2, 3, 4)*. + +Changes in Version 1.11.0 +-------------------------------- +This version is based on and requires MuPDF v1.11. + +Though MuPDF has declared it as being mostly a bug fix version, one major new feature is indeed contained: support of embedded files -- also called portfolios or collections. We have extended PyMuPDF functionality to embrace this up to an extent just a little beyond the *mutool* utility as follows. + +* The *Document* class now support embedded files with several new methods and one new property: + + - *embeddedFileInfo()* returns metadata information about an entry in the list of embedded files. This is more than *mutool* currently provides: it shows all the information that was used to embed the file (not just the entry's name). + - *embeddedFileGet()* retrieves the (decompressed) content of an entry into a *bytes* buffer. + - *embeddedFileAdd(...)* inserts new content into the PDF portfolio. We (in contrast to *mutool*) **restrict** this to entries with a **new name** (no duplicate names allowed). + - *embeddedFileDel(...)* deletes an entry from the portfolio (function not offered in MuPDF). + - *embeddedFileSetInfo()* -- changes filename or description of an embedded file. + - *embeddedFileCount* -- contains the number of embedded files. + +* Several enhancements deal with streamlining geometry objects. These are not connected to the new MuPDF version and most of them are also reflected in PyMuPDF v1.10.0. Among them are new properties to identify the corners of rectangles by name (e.g. *Rect.bottom_right*) and new methods to deal with set-theoretic questions like *Rect.contains(x)* or *IRect.intersects(x)*. Special effort focussed on supporting more "Pythonic" language constructs: *if x in rect ...* is equivalent to *rect.contains(x)*. + +* The :ref:`Rect` chapter now has more background on empty amd infinite rectangles and how we handle them. The handling itself was also updated for more consistency in this area. + +* We have started basic support for **generation** of PDF content: + + - *Document.insertPage()* adds a new page into a PDF, optionally containing some text. + - *Page.insertImage()* places a new image on a PDF page. + - *Page.insertText()* puts new text on an existing page + +* For **FileAttachment** annotations, content and name of the attached file can extracted and changed. + +Changes in Version 1.10.0 +------------------------------- + +MuPDF v1.10 Impact +~~~~~~~~~~~~~~~~~~~~~~~~ +MuPDF version 1.10 has a significant impact on our bindings. Some of the changes also affect the API -- in other words, **you** as a PyMuPDF user. + +* Link destination information has been reduced. Several properties of the *linkDest* class no longer contain valuable information. In fact, this class as a whole has been deleted from MuPDF's library and we in PyMuPDF only maintain it to provide compatibilty to existing code. + +* In an effort to minimize memory requirements, several improvements have been built into MuPDF v1.10: + + - A new *config.h* file can be used to de-select unwanted features in the C base code. Using this feature we have been able to reduce the size of our binary *_fitz.o* / *_fitz.pyd* by about 50% (from 9 MB to 4.5 MB). When UPX-ing this, the size goes even further down to a very handy 2.3 MB. + + - The alpha (transparency) channel for pixmaps is now optional. Letting alpha default to *False* significantly reduces pixmap sizes (by 20% -- CMYK, 25% -- RGB, 50% -- GRAY). Many *Pixmap* constructors therefore now accept an *alpha* boolean to control inclusion of this channel. Other pixmap constructors (e.g. those for file and image input) create pixmaps with no alpha alltogether. On the downside, save methods for pixmaps no longer accept a *savealpha* option: this channel will always be saved when present. To minimize code breaks, we have left this parameter in the call patterns -- it will just be ignored. + +* *DisplayList* and *TextPage* class constructors now **require the mediabox** of the page they are referring to (i.e. the *page.bound()* rectangle). There is no way to construct this information from other sources, therefore a source code change cannot be avoided in these cases. We assume however, that not many users are actually employing these rather low level classes explixitely. So the impact of that change should be minor. + +Other Changes compared to Version 1.9.3 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* The new :ref:`Document` method *write()* writes an opened PDF to memory (as opposed to a file, like *save()* does). +* An annotation can now be scaled and moved around on its page. This is done by modifying its rectangle. +* Annotations can now be deleted. :ref:`Page` contains the new method *deleteAnnot()*. +* Various annotation attributes can now be modified, e.g. content, dates, title (= author), border, colors. +* Method *Document.insertPDF()* now also copies annotations of source pages. +* The *Pages* class has been deleted. As documents can now be accessed with page numbers as indices (like *doc[n] = doc.loadPage(n)*), and document object can be used as iterators, the benefit of this class was too low to maintain it. See the following comments. +* *loadPage(n)* / *doc[n]* now accept arbitrary integers to specify a page number, as long as *n < pageCount*. So, e.g. *doc[-500]* is always valid and will load page *(-500) % pageCount*. +* A document can now also be used as an iterator like this: *for page in doc: ... ...*. This will yield all pages of *doc* as *page*. +* The :ref:`Pixmap` method *getSize()* has been replaced with property *size*. As before *Pixmap.size == len(Pixmap)* is true. +* In response to transparency (alpha) being optional, several new parameters and properties have been added to :ref:`Pixmap` and :ref:`Colorspace` classes to support determining their characteristics. +* The :ref:`Page` class now contains new properties *firstAnnot* and *firstLink* to provide starting points to the respective class chains, where *firstLink* is just a mnemonic synonym to method *loadLinks()* which continues to exist. Similarly, the new property *rect* is a synonym for method *bound()*, which also continues to exist. +* :ref:`Pixmap` methods *samplesRGB()* and *samplesAlpha()* have been deleted because pixmaps can now be created without transparency. +* :ref:`Rect` now has a property *irect* which is a synonym of method *round()*. Likewise, :ref:`IRect` now has property *rect* to deliver a :ref:`Rect` which has the same coordinates as floats values. +* Document has the new method *searchPageFor()* to search for a text string. It works exactly like the corresponding *Page.searchFor()* with page number as additional parameter. + + +Changes in Version 1.9.3 +---------------------------------- +This version is also based on MuPDF v1.9a. Changes compared to version 1.9.2: + +* As a major enhancement, annotations are now supported in a similar way as links. Annotations can be displayed (as pixmaps) and their properties can be accessed. +* In addition to the document *select()* method, some simpler methods can now be used to manipulate a PDF: + + - *copyPage()* copies a page within a document. + - *movePage()* is similar, but deletes the original. + - *deletePage()* deletes a page + - *deletePageRange()* deletes a page range + +* *rotation* or *setRotation()* access or change a PDF page's rotation, respectively. +* Available but undocumented before, :ref:`IRect`, :ref:`Rect`, :ref:`Point` and :ref:`Matrix` support the *len()* method and their coordinate properties can be accessed via indices, e.g. *IRect.x1 == IRect[2]*. +* For convenience, documents now support simple indexing: *doc.loadPage(n) == doc[n]*. The index may however be in range *-pageCount < n < pageCount*, such that *doc[-1]* is the last page of the document. + +Changes in Version 1.9.2 +------------------------------ +This version is also based on MuPDF v1.9a. Changes compared to version 1.9.1: + +* *fitz.open()* (no parameters) creates a new empty **PDF** document, i.e. if saved afterwards, it must be given a *.pdf* extension. +* :ref:`Document` now accepts all of the following formats (*Document* and *open* are synonyms): + + - *open()*, + - *open(filename)* (equivalent to *open(filename, None)*), + - *open(filetype, area)* (equivalent to *open(filetype, stream = area)*). + + Type of memory area *stream* may be *bytes* or *bytearray*. Thus, e.g. *area = open("file.pdf", "rb").read()* may be used directly (without first converting it to bytearray). +* New method *Document.insertPDF()* (PDFs only) inserts a range of pages from another PDF. +* *Document* objects doc now support the *len()* function: *len(doc) == doc.pageCount*. +* New method *Document.getPageImageList()* creates a list of images used on a page. +* New method *Document.getPageFontList()* creates a list of fonts referenced by a page. +* New pixmap constructor *fitz.Pixmap(doc, xref)* creates a pixmap based on an opened PDF document and an :data:`xref` number of the image. +* New pixmap constructor *fitz.Pixmap(cspace, spix)* creates a pixmap as a copy of another one *spix* with the colorspace converted to *cspace*. This works for all colorspace combinations. +* Pixmap constructor *fitz.Pixmap(colorspace, width, height, samples)* now allows *samples* to also be *bytes*, not only *bytearray*. + + +Changes in Version 1.9.1 +---------------------------- +This version of PyMuPDF is based on MuPDF library source code version 1.9a published on April 21, 2016. + +Please have a look at MuPDF's website to see which changes and enhancements are contained herein. + +Changes in version 1.9.1 compared to version 1.8.0 are the following: + +* New methods *getRectArea()* for both *fitz.Rect* and *fitz.IRect* +* Pixmaps can now be created directly from files using the new constructor *fitz.Pixmap(filename)*. +* The Pixmap constructor *fitz.Pixmap(image)* has been extended accordingly. +* *fitz.Rect* can now be created with all possible combinations of points and coordinates. +* PyMuPDF classes and methods now all contain __doc__ strings, most of them created by SWIG automatically. While the PyMuPDF documentation certainly is more detailed, this feature should help a lot when programming in Python-aware IDEs. +* A new document method of *getPermits()* returns the permissions associated with the current access to the document (print, edit, annotate, copy), as a Python dictionary. +* The identity matrix *fitz.Identity* is now **immutable**. +* The new document method *select(list)* removes all pages from a document that are not contained in the list. Pages can also be duplicated and re-arranged. +* Various improvements and new members in our demo and examples collections. Perhaps most prominently: *PDF_display* now supports scrolling with the mouse wheel, and there is a new example program *wxTableExtract* which allows to graphically identify and extract table data in documents. +* *fitz.open()* is now an alias of *fitz.Document()*. +* New pixmap method *getPNGData()* which will return a bytearray formatted as a PNG image of the pixmap. +* New pixmap method *samplesRGB()* providing a *samples* version with alpha bytes stripped off (RGB colorspaces only). +* New pixmap method *samplesAlpha()* providing the alpha bytes only of the *samples* area. +* New iterator *fitz.Pages(doc)* over a document's set of pages. +* New matrix methods *invert()* (calculate inverted matrix), *concat()* (calculate matrix product), *preTranslate()* (perform a shift operation). +* New *IRect* methods *intersect()* (intersection with another rectangle), *translate()* (perform a shift operation). +* New *Rect* methods *intersect()* (intersection with another rectangle), *transform()* (transformation with a matrix), *includePoint()* (enlarge rectangle to also contain a point), *includeRect()* (enlarge rectangle to also contain another one). +* Documented *Point.transform()* (transform a point with a matrix). +* *Matrix*, *IRect*, *Rect* and *Point* classes now support compact, algebraic formulations for manipulating such objects. +* Incremental saves for changes are possible now using the call pattern *doc.save(doc.name, incremental=True)*. +* A PDF's metadata can now be deleted, set or changed by document method *setMetadata()*. Supports incremental saves. +* A PDF's bookmarks (or table of contents) can now be deleted, set or changed with the entries of a list using document method *setToC(list)*. Supports incremental saves. diff --git a/docs/classes.rst b/docs/classes.rst new file mode 100644 index 0000000..1347379 --- /dev/null +++ b/docs/classes.rst @@ -0,0 +1,28 @@ +============ +Classes +============ + +.. toctree:: + :maxdepth: 2 + + annot + colorspace + displaylist + document + font + identity + irect + link + linkdest + matrix + outline + page + pixmap + point + quad + rect + shape + textpage + textwriter + tools + widget diff --git a/docs/colors.rst b/docs/colors.rst new file mode 100644 index 0000000..510ae69 --- /dev/null +++ b/docs/colors.rst @@ -0,0 +1,43 @@ +.. _ColorDatabase: + +================ +Color Database +================ +Since the introduction of methods involving colors (like :meth:`Page.drawCircle`), a requirement may be to have access to predefined colors. + +The fabulous GUI package `wxPython `_ has a database of over 540 predefined RGB colors, which are given more or less memorizable names. Among them are not only standard names like "green" or "blue", but also "turquoise", "skyblue", and 100 (not only 50 ...) shades of "gray", etc. + +We have taken the liberty to copy this database (a list of tuples) modified into PyMuPDF and make its colors available as PDF compatible float triples: for wxPython's *("WHITE", 255, 255, 255)* we return *(1, 1, 1)*, which can be directly used in *color* and *fill* parameters. We also accept any mixed case of "wHiTe" to find a color. + +Function *getColor()* +------------------------ +As the color database may not be needed very often, one additional import statement seems acceptable to get access to it:: + + >>> # "getColor" is the only method you really need + >>> from fitz.utils import getColor + >>> getColor("aliceblue") + (0.9411764705882353, 0.9725490196078431, 1.0) + >>> # + >>> # to get a list of all existing names + >>> from fitz.utils import getColorList + >>> cl = getColorList() + >>> cl + ['ALICEBLUE', 'ANTIQUEWHITE', 'ANTIQUEWHITE1', 'ANTIQUEWHITE2', 'ANTIQUEWHITE3', + 'ANTIQUEWHITE4', 'AQUAMARINE', 'AQUAMARINE1'] ... + >>> # + >>> # to see the full integer color coding + >>> from fitz.utils import getColorInfoList + >>> il = getColorInfoList() + >>> il + [('ALICEBLUE', 240, 248, 255), ('ANTIQUEWHITE', 250, 235, 215), + ('ANTIQUEWHITE1', 255, 239, 219), ('ANTIQUEWHITE2', 238, 223, 204), + ('ANTIQUEWHITE3', 205, 192, 176), ('ANTIQUEWHITE4', 139, 131, 120), + ('AQUAMARINE', 127, 255, 212), ('AQUAMARINE1', 127, 255, 212)] ... + + +Printing the Color Database +---------------------------- +If you want to actually see how the many available colors look like, use scripts `colordbRGB.py `_ or `colordbHSV.py `_ in the examples directory. They create PDFs (already existing in the same directory) with all these colors. Their only difference is sorting order: one takes the RGB values, the other one the Hue-Saturation-Values as sort criteria. +This is a screen print of what these files look like. + +.. image:: images/img-colordb.png diff --git a/docs/colorspace.rst b/docs/colorspace.rst new file mode 100644 index 0000000..891154f --- /dev/null +++ b/docs/colorspace.rst @@ -0,0 +1,39 @@ +.. _Colorspace: + +================ +Colorspace +================ + +Represents the color space of a :ref:`Pixmap`. + + +**Class API** + +.. class:: Colorspace + + .. method:: __init__(self, n) + + Constructor + + :arg int n: A number identifying the colorspace. Possible values are :data:`CS_RGB`, :data:`CS_GRAY` and :data:`CS_CMYK`. + + .. attribute:: name + + The name identifying the colorspace. Example: *fitz.csCMYK.name = 'DeviceCMYK'*. + + :type: str + + .. attribute:: n + + The number of bytes required to define the color of one pixel. Example: *fitz.csCMYK.n == 4*. + + :type: int + + + **Predefined Colorspaces** + + For saving some typing effort, there exist predefined colorspace objects for the three available cases. + + * :data:`csRGB` = *fitz.Colorspace(fitz.CS_RGB)* + * :data:`csGRAY` = *fitz.Colorspace(fitz.CS_GRAY)* + * :data:`csCMYK` = *fitz.Colorspace(fitz.CS_CMYK)* diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..88966e4 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,248 @@ +# -*- coding: utf-8 -*- +# +import sys +import os +import sphinx_rtd_theme + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# needs_sphinx = "3.1" + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.autodoc", + # "sphinx.ext.todo", + "sphinx.ext.coverage", + "sphinx.ext.ifconfig", + # "sphinx.ext.imgmath", +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix of source filenames. +# source_suffix = ".rst" + +# The encoding of source files. +# source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = "PyMuPDF" +copyright = "2015-2020, Jorj X. McKie" + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The full version, including alpha/beta/rc tags. +release = "1.17.4" + +# The short X.Y version +version = release + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +# today = '' +# Else, today_fmt is used as the format for a strftime call. +# today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ["_build"] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# A list of ignored prefixes for module index sorting. +modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +keep_warnings = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# html_theme = "agogo" +# html_theme = "sphinxdoc" +# html_theme = "python_docs_theme" +html_theme = "sphinx_rtd_theme" +# html_theme = "classic" + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +html_theme_options = { + # "root_name": "", + # "root_url": "", + # "root_icon": "pymupdf.ico", + # "sidebarbgcolor": "gray", +} + +# Add any paths that contain custom themes here, relative to this directory. +# html_theme_path = [] +# html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +# html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +# html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +# html_logo = "images/img-pymupdf.jpg" + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +html_favicon = "Pymupdf.ico" + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +# html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +html_last_updated_fmt = "%d. %b %Y" + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +# html_use_smartypants = False + +# Custom sidebar templates, maps document names to template names. +# html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +html_additional_pages = {} + +# If false, no module index is generated. +html_domain_indices = True + +# If false, no index is generated. +html_use_index = True + +# If true, the index is split into individual pages for each letter. +html_split_index = True + +# If true, links to the reST sources are added to the pages. +html_show_sourcelink = True +html_sourcelink_suffix = ".rst" +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +# html_use_opensearch = "https://pymupdf.readthedocs.io/en/latest" + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +# html_file_suffix = ".html" + +# Output file base name for HTML help builder. +htmlhelp_basename = "PyMuPDF" + + +# -- Options for LaTeX output --------------------------------------------- +latex_elements = { + # "fontpkg": r"\usepackage[sfdefault]{ClearSans} \usepackage[T1]{fontenc}" +} +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ("index", "PyMuPDF.tex", u"PyMuPDF Documentation", u"Jorj X. McKie", "manual") +] +# The name of an image file (relative to this directory) to place at the top of +# the title page. +latex_logo = "images/img-pymupdf.jpg" + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +# latex_use_parts = False + +# If true, show page references after internal links. +latex_show_pagerefs = False + +# If true, show URL addresses after external links. +# latex_show_urls = True +# latex_use_xindy = True +# Documents to append as an appendix to all manuals. +# latex_appendices = [] + +# If false, no module index is generated. +latex_domain_indices = True + +# -- Options for PDF output -------------------------------------------------- +# Grouping the document tree into PDF files. List of tuples +# (source start file, target name, title, author). + +pdf_documents = [("index", "PyMuPDF", "PyMuPDF Manual", "Jorj McKie")] + +# A comma-separated list of custom stylesheets. Example: +pdf_stylesheets = ["sphinx", "bahnschrift"] + +# Create a compressed PDF +pdf_compressed = True + +# A colon-separated list of folders to search for fonts. Example: +# pdf_font_path=['/usr/share/fonts', '/usr/share/texmf-dist/fonts/'] + +# Language to be used for hyphenation support +pdf_language = "en_US" + +# If false, no index is generated. +pdf_use_index = True + +# If false, no modindex is generated. +pdf_use_modindex = True + +# If false, no coverpage is generated. +pdf_use_coverpage = True + +pdf_break_level = 2 + +pdf_verbosity = 0 +pdf_invariant = True diff --git a/docs/coop_low.rst b/docs/coop_low.rst new file mode 100644 index 0000000..02146c9 --- /dev/null +++ b/docs/coop_low.rst @@ -0,0 +1,71 @@ + +.. _cooperation: + +=============================================================== +Working together: DisplayList and TextPage +=============================================================== +Here are some instructions on how to use these classes together. + +In some situations, performance improvements may be achievable, when you fall back to the detail level explained here. + +Create a DisplayList +--------------------- +A :ref:`DisplayList` represents an interpreted document page. Methods for pixmap creation, text extraction and text search are -- behind the curtain -- all using the page's display list to perform their tasks. If a page must be rendered several times (e.g. because of changed zoom levels), or if text search and text extraction should both be performed, overhead can be saved, if the display list is created only once and then used for all other tasks. + +>>> dl = page.getDisplayList() # create the display list + +You can also create display lists for many pages "on stack" (in a list), may be during document open, during idling times, or you store it when a page is visited for the first time (e.g. in GUI scripts). + +Note, that for everything what follows, only the display list is needed -- the corresponding :ref:`Page` object could have been deleted. + +Generate Pixmap +------------------ +The following creates a Pixmap from a :ref:`DisplayList`. Parameters are the same as for :meth:`Page.getPixmap`. + +>>> pix = dl.getPixmap() # create the page's pixmap + +The execution time of this statement may be up to 50% shorter than that of :meth:`Page.getPixMap`. + +Perform Text Search +--------------------- +With the display list from above, we can also search for text. + +For this we need to create a :ref:`TextPage`. + +>>> tp = dl.getTextPage() # display list from above +>>> rlist = tp.search("needle") # look up "needle" locations +>>> for r in rlist: # work with the found locations, e.g. + pix.invertIRect(r.irect) # invert colors in the rectangles + +Extract Text +---------------- +With the same :ref:`TextPage` object from above, we can now immediately use any or all of the 5 text extraction methods. + +.. note:: Above, we have created our text page without argument. This leads to a default argument of 3 (ligatures and white-space are preserved), IAW images will **not** be extracted -- see below. + +>>> txt = tp.extractText() # plain text format +>>> json = tp.extractJSON() # json format +>>> html = tp.extractHTML() # HTML format +>>> xml = tp.extractXML() # XML format +>>> xml = tp.extractXHTML() # XHTML format + +Further Performance improvements +--------------------------------- +Pixmap +~~~~~~~ +As explained in the :ref:`Page` chapter: + +If you do not need transparency set *alpha = 0* when creating pixmaps. This will save 25% memory (if RGB, the most common case) and possibly 5% execution time (depending on the GUI software). + +TextPage +~~~~~~~~~ +If you do not need images extracted alongside the text of a page, you can set the following option: + +>>> flags = fitz.TEXT_PRESERVE_LIGATURES | fitz.TEXT_PRESERVE_WHITESPACE +>>> tp = dl.getTextPage(flags) + +This will save ca. 25% overall execution time for the HTML, XHTML and JSON text extractions and **hugely** reduce the amount of storage (both, memory and disk space) if the document is graphics oriented. + +If you however do need images, use a value of 7 for flags: + +>>> flags = fitz.TEXT_PRESERVE_LIGATURES | fitz.TEXT_PRESERVE_WHITESPACE | fitz.TEXT_PRESERVE_IMAGES diff --git a/docs/device.rst b/docs/device.rst new file mode 100644 index 0000000..7c4ed3b --- /dev/null +++ b/docs/device.rst @@ -0,0 +1,33 @@ +.. _Device: + +================ +Device +================ + +The different format handlers (pdf, xps, etc.) interpret pages to a "device". Devices are the basis for everything that can be done with a page: rendering, text extraction and searching. The device type is determined by the selected construction method. + +**Class API** + +.. class:: Device + + .. method:: __init__(self, object, clip) + + Constructor for either a pixel map or a display list device. + + :arg object: either a *Pixmap* or a *DisplayList*. + :type object: :ref:`Pixmap` or :ref:`DisplayList` + + :arg clip: An optional `IRect` for *Pixmap* devices to restrict rendering to a certain area of the page. If the complete page is required, specify *None*. For display list devices, this parameter must be omitted. + :type clip: :ref:`IRect` + + .. method:: __init__(self, textpage, flags=0) + + Constructor for a text page device. + + :arg textpage: *TextPage* object + :type textpage: :ref:`TextPage` + + :arg int flags: control the way how text is parsed into the text page. Currently 3 options can be coded into this parameter, see :ref:`TextPreserve`. To set these options use something like *flags=0 | TEXT_PRESERVE_LIGATURES | ...*. + +.. note:: In higher level code (:meth:`Page.getText`, :meth:`Document.getPageText`), the following decisions for creating text devices have been implemented: (1) *TEXT_PRESERVE_LIGATURES* and *TEXT_PRESERVE_WHITESPACES* are always set, (2) *TEXT_PRESERVE_IMAGES* is set for JSON and HTML, otherwise off. + diff --git a/docs/displaylist.rst b/docs/displaylist.rst new file mode 100644 index 0000000..b02be11 --- /dev/null +++ b/docs/displaylist.rst @@ -0,0 +1,92 @@ +.. _DisplayList: + +================ +DisplayList +================ + +DisplayList is a list containing drawing commands (text, images, etc.). The intent is two-fold: + +1. as a caching-mechanism to reduce parsing of a page +2. as a data structure in multi-threading setups, where one thread parses the page and another one renders pages. This aspect is currently not supported by PyMuPDF. + +A display list is populated with objects from a page, usually by executing :meth:`Page.getDisplayList`. There also exists an independent constructor. + +"Replay" the list (once or many times) by invoking one of its methods :meth:`~DisplayList.run`, :meth:`~DisplayList.getPixmap` or :meth:`~DisplayList.getTextPage`. + + +================================= ============================================ +**Method** **Short Description** +================================= ============================================ +:meth:`~DisplayList.run` Run a display list through a device. +:meth:`~DisplayList.getPixmap` generate a pixmap +:meth:`~DisplayList.getTextPage` generate a text page +:attr:`~DisplayList.rect` mediabox of the display list +================================= ============================================ + + +**Class API** + +.. class:: DisplayList + + .. method:: __init__(self, mediabox) + + Create a new display list. + + :arg mediabox: The page's rectangle. + :type mediabox: :ref:`Rect` + + :rtype: *DisplayList* + + .. method:: run(device, matrix, area) + + Run the display list through a device. The device will populate the display list with its "commands" (i.e. text extraction or image creation). The display list can later be used to "read" a page many times without having to re-interpret it from the document file. + + You will most probably instead use one of the specialized run methods below -- :meth:`getPixmap` or :meth:`getTextPage`. + + :arg device: Device + :type device: :ref:`Device` + + :arg matrix: Transformation matrix to apply to the display list contents. + :type matrix: :ref:`Matrix` + + :arg area: Only the part visible within this area will be considered when the list is run through the device. + :type area: :ref:`Rect` + + .. index:: + pair: matrix; getPixmap + pair: colorspace; getPixmap + pair: clip; getPixmap + pair: alpha; getPixmap + + .. method:: getPixmap(matrix=fitz.Identity, colorspace=fitz.csRGB, alpha=0, clip=None) + + Run the display list through a draw device and return a pixmap. + + :arg matrix: matrix to use. Default is the identity matrix. + :type matrix: :ref:`Matrix` + + :arg colorspace: the desired colorspace. Default is RGB. + :type colorspace: :ref:`Colorspace` + + :arg int alpha: determine whether or not (0, default) to include a transparency channel. + + :arg clip: an area of the full mediabox to which the pixmap should be restricted. + :type clip: :ref:`IRect` or :ref:`Rect` + + :rtype: :ref:`Pixmap` + :returns: pixmap of the display list. + + .. method:: getTextPage(flags) + + Run the display list through a text device and return a text page. + + :arg int flags: control which information is parsed into a text page. Default value in PyMuPDF is **3 = TEXT_PRESERVE_LIGATURES | TEXT_PRESERVE_WHITESPACE**, i.e. ligatures are **passed through**, white spaces are **passed through** (not translated to spaces), and images are **not included**. See :ref:`TextPreserve`. + + :rtype: :ref:`TextPage` + :returns: text page of the display list. + + .. attribute:: rect + + Contains the display list's mediabox. This will equal the page's rectangle if it was created via :meth:`Page.getDisplayList`. + + :type: :ref:`Rect` diff --git a/docs/document.rst b/docs/document.rst new file mode 100644 index 0000000..8167205 --- /dev/null +++ b/docs/document.rst @@ -0,0 +1,1120 @@ +.. _Document: + +================ +Document +================ + +.. highlight:: python + +This class represents a document. It can be constructed from a file or from memory. + +Since version 1.9.0 there exists the alias *open* for this class, i.e. ``fitz.Document(...)`` and ``fitz.open(...)`` do exactly the same thing. + +For details on **embedded files** refer to Appendix 3. + +.. note:: + + Starting with v1.17.0, a new page addressing mechanism for **EPUB files only** is supported. This document type is internally organized in chapters such that pages can most efficiently be found by their so-called "location". The location is a tuple *(chapter, pno)* consisting of the chapter number and the page number **in that chapter**. Both numbers are zero-based. + + While it is still possible to locate a page via its (absoute) number, doing so may mean that the complete document has to be layouted before the page can be addressed. This may have a significant performance implication if the document is very large. Due to internal EPUB file structures, using the page's **location** *(chapter, pno)* prevents this from happening. + + To maintain a consistent API, PyMuPDF supports page *location* syntax for **all file types** -- documents without this feature simply have just one chapter. :meth:`Document.loadPage` and the equivalent index access now also support using the page *location*. There are a number of methods to convert between page numbers and locations, determine the chapter count, the page count per chapter, to compute the next and previous locations, and the last page location of a document. + +======================================= ========================================================== +**Method / Attribute** **Short Description** +======================================= ========================================================== +:meth:`Document.authenticate` gain access to an encrypted document +:meth:`Document.can_save_incrementally` check if incremental save is possible +:meth:`Document.chapterPageCount` number of pages in chapter +:meth:`Document.close` close the document +:meth:`Document.convertToPDF` write a PDF version to memory +:meth:`Document.copyPage` PDF only: copy a page reference +:meth:`Document.deletePage` PDF only: delete a page +:meth:`Document.deletePageRange` PDF only: delete a page range +:meth:`Document.embeddedFileAdd` PDF only: add a new embedded file from buffer +:meth:`Document.embeddedFileCount` PDF only: number of embedded files +:meth:`Document.embeddedFileDel` PDF only: delete an embedded file entry +:meth:`Document.embeddedFileGet` PDF only: extract an embedded file buffer +:meth:`Document.embeddedFileInfo` PDF only: metadata of an embedded file +:meth:`Document.embeddedFileNames` PDF only: list of embedded files +:meth:`Document.embeddedFileUpd` PDF only: change an embedded file +:meth:`Document.findBookmark` retrieve page location after layouting +:meth:`Document.fullcopyPage` PDF only: duplicate a page +:meth:`Document.getPageFontList` PDF only: make a list of fonts on a page +:meth:`Document.getPageImageList` PDF only: make a list of images on a page +:meth:`Document.getPagePixmap` create a pixmap of a page by page number +:meth:`Document.getPageText` extract the text of a page by page number +:meth:`Document.getPageXObjectList` PDF only: make a list of XObjects on a page +:meth:`Document.getSigFlags` PDF only: determine signature state +:meth:`Document.getToC` create a table of contents +:meth:`Document.insertPage` PDF only: insert a new page +:meth:`Document.insertPDF` PDF only: insert pages from another PDF +:meth:`Document.layout` re-paginate the document (if supported) +:meth:`Document.loadPage` read a page +:meth:`Document.makeBookmark` create a page pointer in reflowable documents +:meth:`Document.metadataXML` PDF only: :data:`xref` of XML metadata +:meth:`Document.movePage` PDF only: move a page to different location in doc +:meth:`Document.need_appearances` PDF only: get/set */NeedAppearances* property +:meth:`Document.newPage` PDF only: insert a new empty page +:meth:`Document.nextLocation` return (chapter, pno) of following page +:meth:`Document.pages` iterator over a page range +:meth:`Document.PDFCatalog` PDF only: :data:`xref` of catalog (root) +:meth:`Document.PDFTrailer` PDF only: trailer source +:meth:`Document.previousLocation` return (chapter, pno) of preceeding page +:meth:`Document.reload_page` PDF only: provide a new copy of a page +:meth:`Document.save` PDF only: save the document +:meth:`Document.saveIncr` PDF only: save the document incrementally +:meth:`Document.scrub` PDF only: remove sensitive data +:meth:`Document.searchPageFor` search for a string on a page +:meth:`Document.select` PDF only: select a subset of pages +:meth:`Document.setMetadata` PDF only: set the metadata +:meth:`Document.setToC` PDF only: set the table of contents (TOC) +:meth:`Document.updateObject` PDF only: replace object source +:meth:`Document.updateStream` PDF only: replace stream source +:meth:`Document.write` PDF only: writes document to memory +:meth:`Document.xrefObject` PDF only: object source at the :data:`xref` +:meth:`Document.xrefStream` PDF only: decompressed stream source at :data:`xref` +:meth:`Document.xrefStreamRaw` PDF only: raw stream source at :data:`xref` +:attr:`Document.chapterCount` number of chapters +:attr:`Document.FormFonts` PDF only: list of global widget fonts +:attr:`Document.isClosed` has document been closed? +:attr:`Document.isDirty` PDF only: has document been changed yet? +:attr:`Document.isEncrypted` document (still) encrypted? +:attr:`Document.isFormPDF` is this a Form PDF? +:attr:`Document.isPDF` is this a PDF? +:attr:`Document.isReflowable` is this a reflowable document? +:attr:`Document.lastLocation` (chapter, pno) of last page +:attr:`Document.metadata` metadata +:attr:`Document.name` filename of document +:attr:`Document.needsPass` require password to access data? +:attr:`Document.outline` first `Outline` item +:attr:`Document.pageCount` number of pages +:attr:`Document.permissions` permissions to access the document +======================================= ========================================================== + +**Class API** + +.. class:: Document + + .. index:: + pair: filename; open + pair: stream; open + pair: filetype; open + pair: rect; open + pair: width; open + pair: height; open + pair: fontsize; open + pair: open; Document + pair: filename; Document + pair: stream; Document + pair: filetype; Document + pair: rect; Document + pair: fontsize; Document + + .. method:: __init__(self, filename=None, stream=None, filetype=None, rect=None, width=0, height=0, fontsize=11) + + Creates a *Document* object. + + * With default parameters, a **new empty PDF** document will be created. + * If *stream* is given, then the document is created from memory and either *filename* or *filetype* must indicate its type. + * If *stream* is *None*, then a document is created from the file given by *filename*. Its type is inferred from the extension, which can be overruled by specifying *filetype*. + + :arg str,pathlib filename: A UTF-8 string or *pathlib* object containing a file path (or a file type, see below). + + :arg bytes,bytearray,BytesIO stream: A memory area containing a supported document. Its type **must** be specified by either *filename* or *filetype*. + + *(Changed in version 1.14.13)* *io.BytesIO* is now also supported. + + :arg str filetype: A string specifying the type of document. This may be something looking like a filename (e.g. "x.pdf"), in which case MuPDF uses the extension to determine the type, or a mime type like *application/pdf*. Just using strings like "pdf" will also work. + + :arg rect_like rect: a rectangle specifying the desired page size. This parameter is only meaningful for documents with a variable page layout ("reflowable" documents), like e-books or HTML, and ignored otherwise. If specified, it must be a non-empty, finite rectangle with top-left coordinates (0, 0). Together with parameter *fontsize*, each page will be accordingly laid out and hence also determine the number of pages. + + :arg float width: may used together with *height* as an alternative to *rect* to specify layout information. + + :arg float height: may used together with *width* as an alternative to *rect* to specify layout information. + + :arg float fontsize: the default fontsize for reflowable document types. This parameter is ignored if none of the parameters *rect* or *width* and *height* are specified. Will be used to calculate the page layout. + + Overview of possible forms (using the *open* synonym of *Document*):: + + >>> # from a file + >>> doc = fitz.open("some.pdf") + >>> doc = fitz.open("some.file", None, "pdf") # copes with wrong extension + >>> doc = fitz.open("some.file", filetype="pdf") # copes with wrong extension + >>> + >>> # from memory + >>> doc = fitz.open("pdf", mem_area) + >>> doc = fitz.open(None, mem_area, "pdf") + >>> doc = fitz.open(stream=mem_area, filetype="pdf") + >>> + >>> # new empty PDF + >>> doc = fitz.open() + >>> + + .. method:: authenticate(password) + + Decrypts the document with the string *password*. If successful, document data can be accessed. For PDF documents, the "owner" and the "user" have different priviledges, and hence different passwords may exist for these authorization levels. The method will automatically establish the appropriate access rights for the provided password. + + :arg str password: owner or user password. + + :rtype: int + :returns: a positive value if successful, zero otherwise. If successful, the indicator *isEncrypted* is set to *False*. Positive return codes carry the following information detail: + + * bit 0 set => no password required -- happens if method was used although :meth:`needsPass` was zero. + * bit 1 set => **user** password authenticated + * bit 2 set => **owner** password authenticated + + + .. method:: makeBookmark(loc) + + *(New in v.1.17.3)* Return a page pointer in a reflowable document. After re-layouting the document, the result of this method can be used to find the new location of the page. + + .. note:: Do not confuse with items of a table of contents, TOC. + + :arg list,tuple loc: page location. Must be a valid *(chapter, pno)*. + + :rtype: pointer + :returns: a long integer in pointer format. To be used for finding the new location of the page after re-layouting the document. Do not touch or re-assign. + + + .. method:: findBookmark(bookmark) + + *(New in v.1.17.3)* Return the new page location after re-layouting the document. + + :arg pointer bookmark: created by :meth:`Document.makeBookmark`. + + :rtype: tuple + :returns: the new (chapter, pno) of the page. + + + .. method:: chapterPageCount(chapter) + + *(New in v.1.17.0)* Return the number of pages of a chapter. + + :arg int chapter: the 0-based chapter number. + + :rtype: int + :returns: number of pages in chapter. Relevant only for document types whith chapter support (EPUB currently). + + + .. method:: nextLocation(page_id) + + *(New in v.1.17.0)* Return the location of the following page. + + :arg tuple page_id: the current page id. This must be a tuple *(chapter, pno)* identifying an existing page. + + :returns: The tuple of the following page, i.e. either *(chapter, pno + 1)* or *(chapter + 1, 0)*, **or** the empty tuple *()* if the argument was the last page. Relevant only for document types whith chapter support (EPUB currently). + + + .. method:: previousLocation(page_id) + + *(New in v.1.17.0)* Return the locator of the preceeding page. + + :arg tuple page_id: the current page id. This must be a tuple *(chapter, pno)* identifying an existing page. + + :returns: The tuple of the preceeding page, i.e. either *(chapter, pno - 1)* or the last page of the receeding chapter, **or** the empty tuple *()* if the argument was the first page. Relevant only for document types whith chapter support (EPUB currently). + + + .. method:: loadPage(page_id=0) + + Create a :ref:`Page` object for further processing (like rendering, text searching, etc.). + + *(Changed in v1.17.0)* For document types supporting a so-called "chapter structure" (like EPUB), pages can also be loaded via the combination of chapter number and relative page number, instead of the absolute page number. This should **significantly speed up access** for large documents. + + :arg int,tuple page_id: *(Changed in v1.17.0)* + + Either a 0-based page number, or a tuple *(chapter, pno)*. For an **integer**, any *-inf < page_id < pageCount* is acceptable. While page_id is negative, :attr:`pageCount` will be added to it. For example: to load the last page, you can use *doc.loadPage(-1)*. After this you have page.number = doc.pageCount - 1. + + For a tuple, *chapter* must be in range :attr:`Document.chapterCount`, and *pno* must be in range :meth:`Document.chapterPageCount` of that chapter. Both values are 0-based. Using this notation, :attr:`Page.number` will equal the given tuple. Relevant only for document types whith chapter support (EPUB currently). + + :rtype: :ref:`Page` + + .. note:: + + Documents also follow the Python sequence protocol with page numbers as indices: *doc.loadPage(n) == doc[n]*. + + For **absolute page numbers** only, expressions like *"for page in doc: ..."* and *"for page in reversed(doc): ..."* will successively yield the document's pages. Refer to :meth:`Document.pages` which allows processing pages as with slicing. + + You can also use index notation with the new chapter-based page identification: use *page = doc[(5, 2)]* to load the third page of the sixth chapter. + + To maintain a consistent API, for document types not supporting a chapter structure (like PDFs), :attr:`Document.chapterCount` is 1, and pages can also be loaded via tuples *(0, pno)*. See this [#f3]_ footnote for comments on performance improvements. + + .. method:: reload_page(page) + + *(New in version 1.16.10)* + + PDF only: Provide a new copy of a page after finishing and updating all pending changes. + + :arg page: page object. + :type page: :ref:`Page` + + :rtype: :ref:`Page` + + :returns: a new copy of the same page. All pending updates (e.g. to annotations or widgets) will be finalized and a fresh copy of the page will be loaded. + .. note:: In a typical use case, a page :ref:`Pixmap` should be taken after annotations / widgets have been added or changed. To force all those changes being reflected in the page structure, this method re-instates a fresh copy while keeping the object hierarchy "document -> page -> annotation(s)" intact. + + + .. method:: pages(start=None, [stop=None, [step=None]]) + + *(New in version 1.16.4)* + + A generator for a given range of pages. Parameters have the same meaning as in the built-in function *range()*. Intended for expressions of the form *"for page in doc.pages(start, stop, step): ..."*. + + :arg int start: start iteration with this page number. Default is zero, allowed values are -inf < start < pageCount. While this is negative, :attr:`pageCount` is added **before** starting the iteration. + :arg int stop: stop iteration at this page number. Default is :attr:`pageCount`, possible are -inf < stop <= pageCount. Larger values are **silently replaced** by the default. Negative values will cyclically emit the pages in reversed order. As with the built-in *range()*, this is the first page **not** returned. + :arg int step: stepping value. Defaults are 1 if start < stop and -1 if start > stop. Zero is not allowed. + + :returns: a generator iterator over the document's pages. Some examples: + + * "doc.pages()" emits all pages. + * "doc.pages(4, 9, 2)" emits pages 4, 6, 8. + * "doc.pages(0, None, 2)" emits all pages with even numbers. + * "doc.pages(-2)" emits the last two pages. + * "doc.pages(-1, -1)" emits all pages in reversed order. + * "doc.pages(-1, -10)" emits pages in reversed order, starting with the last page **repeatedly**. For a 4-page document the following page numbers are emitted: 3, 2, 1, 0, 3, 2, 1, 0, 3, 2, 1, 0, 3. + + .. index:: + pair: from_page; convertToPDF (Document method) + pair: to_page; convertToPDF (Document method) + pair: rotate; convertToPDF (Document method) + + .. method:: convertToPDF(from_page=-1, to_page=-1, rotate=0) + + Create a PDF version of the current document and write it to memory. **All document types** (except PDF) are supported. The parameters have the same meaning as in :meth:`insertPDF`. In essence, you can restrict the conversion to a page subset, specify page rotation, and revert page sequence. + + :arg int from_page: first page to copy (0-based). Default is first page. + + :arg int to_page: last page to copy (0-based). Default is last page. + + :arg int rotate: rotation angle. Default is 0 (no rotation). Should be *n * 90* with an integer n (not checked). + + :rtype: bytes + :returns: a Python *bytes* object containing a PDF file image. It is created by internally using *write(garbage=4, deflate=True)*. See :meth:`write`. You can output it directly to disk or open it as a PDF. Here are some examples:: + + >>> # convert an XPS file to PDF + >>> xps = fitz.open("some.xps") + >>> pdfbytes = xps.convertToPDF() + >>> + >>> # either do this ---> + >>> pdf = fitz.open("pdf", pdfbytes) + >>> pdf.save("some.pdf") + >>> + >>> # or this ---> + >>> pdfout = open("some.pdf", "wb") + >>> pdfout.write(pdfbytes) + >>> pdfout.close() + + >>> # copy image files to PDF pages + >>> # each page will have image dimensions + >>> doc = fitz.open() # new PDF + >>> imglist = [ ... image file names ...] # e.g. a directory listing + >>> for img in imglist: + imgdoc=fitz.open(img) # open image as a document + pdfbytes=imgdoc.convertToPDF() # make a 1-page PDF of it + imgpdf=fitz.open("pdf", pdfbytes) + doc.insertPDF(imgpdf) # insert the image PDF + >>> doc.save("allmyimages.pdf") + + .. note:: The method uses the same logic as the *mutool convert* CLI. This works very well in most cases -- however, beware of the following limitations. + + * Image files: perfect, no issues detected. Apparently however, image transparency is ignored. If you need that (like for a watermark), use :meth:`Page.insertImage` instead. Otherwise, this method is recommended for its much better prformance. + * XPS: appearance very good. Links work fine, outlines (bookmarks) are lost, but can easily be recovered [#f2]_. + * EPUB, CBZ, FB2: similar to XPS. + * SVG: medium. Roughly comparable to `svglib `_. + + .. method:: getToC(simple=True) + + Creates a table of contents out of the document's outline chain. + + :arg bool simple: Indicates whether a simple or a detailed ToC is required. If *simple == False*, each entry of the list also contains a dictionary with :ref:`linkDest` details for each outline entry. + + :rtype: list + + :returns: a list of lists. Each entry has the form *[lvl, title, page, dest]*. Its entries have the following meanings: + + * *lvl* -- hierarchy level (positive *int*). The first entry is always 1. Entries in a row are either **equal**, **increase** by 1, or **decrease** by any number. + * *title* -- title (*str*) + * *page* -- 1-based page number (*int*). Page numbers *< 1* either indicate a target outside this document or no target at all (see next entry). + * *dest* -- (*dict*) included only if *simple=False*. Contains details of the link destination. + + .. method:: getPagePixmap(pno, *args, **kwargs) + + Creates a pixmap from page *pno* (zero-based). Invokes :meth:`Page.getPixmap`. + + :arg int pno: page number, 0-based in -inf < pno < pageCount. + + :rtype: :ref:`Pixmap` + + .. method:: getPageXObjectList(pno) + + PDF only: *(New in v1.16.13)* Return a list of all XObjects referenced by a page. + + :arg int pno: page number, 0-based, *-inf < pno < pageCount*. + + :rtype: list + :returns: a list of (non-image) XObjects. These objects typically represent pages *embedded* (not copied) from other PDFs. For example, meth:`Page.showPDFpage` will create this type of object. An item of this list has the following layout: **(xref, name, invoker, bbox)**, where + + * **xref** (*int*) is the XObject's :data:`xref` + * **name** (*str*) is the symbolic name to reference the XObject + * **invoker** (*int*) the :data:`xref` of the invoking XObject or zero if the page directly invokes it + * **bbox** (*tuple*) the boundary box of the XObject's location on the page **in untransformed coordinates**. To get actual, non-rotated page coordinates, multiply with the page's transformation matrix :meth:`Page.getTransformation`. + + + .. method:: getPageImageList(pno, full=False) + + PDF only: Return a list of all image descriptions referenced by a page. + + :arg int pno: page number, 0-based, *-inf < pno < pageCount*. + :arg bool full: whether to also include the invoker's :data:`xref` (which is zero if this is the page). + + :rtype: list + + :returns: a list of images shown on this page. Each item looks like + + **(xref, smask, width, height, bpc, colorspace, alt. colorspace, name, filter, invoker)** + + Where + + * **xref** (*int*) is the image object number + * **smask** (*int*) is the object number of its soft-mask image + * **width** and **height** (*ints*) are the image dimensions + * **bpc** (*int*) denotes the number of bits per component (normally 8) + * **colorspace** (*str*) a string naming the colorspace (like **DeviceRGB**) + * **alt. colorspace** (*str*) is any alternate colorspace depending on the value of **colorspace** + * **name** (*str*) is the symbolic name by which the image is referenced + * **filter** (*str*) is the decode filter of the image (:ref:`AdobeManual`, pp. 65). + * **invoker** (*int*) the :data:`xref` of the invoker. Zero if directly referenced by the page. Only present if *full=True*. + + See below how this information can be used to extract PDF images as separate files. Another demonstration:: + + >>> doc = fitz.open("pymupdf.pdf") + >>> doc.getPageImageList(0, full=True) + [[316, 0, 261, 115, 8, 'DeviceRGB', '', 'Im1', 'DCTDecode', 0]] + >>> pix = fitz.Pixmap(doc, 316) # 316 is the xref of the image + >>> pix + fitz.Pixmap(DeviceRGB, fitz.IRect(0, 0, 261, 115), 0) + + .. method:: getPageFontList(pno, full=False) + + PDF only: Return a list of all fonts referenced by the page. + + :arg int pno: page number, 0-based, -inf < pno < pageCount. + :arg bool full: whether to also include the invoker's :data:`xref` (which is zero if directly referenced by the page). + + :rtype: list + + :returns: a list of fonts referenced by this page. Each entry looks like + + **(xref, ext, type, basefont, name, encoding, invoker)**, + + where + + * **xref** (*int*) is the font object number (may be zero if the PDF uses one of the builtin fonts directly) + * **ext** (*str*) font file extension (e.g. "ttf", see :ref:`FontExtensions`) + * **type** (*str*) is the font type (like "Type1" or "TrueType" etc.) + * **basefont** (*str*) is the base font name, + * **name** (*str*) is the symbolic name, by which the font is referenced + * **encoding** (*str*) the font's character encoding if different from its built-in encoding (:ref:`AdobeManual`, p. 414): + * **invoker** (*int* optional) the :data:`xref` of the invoker. Zero if directly referenced by the page. Only present if *full=True*. + + Example:: + + >>> doc = fitz.open("some.pdf") + >>> for f in doc.getPageFontList(0, full=False): print(f) + [24, 'ttf', 'TrueType', 'DOKBTG+Calibri', 'R10', ''] + [17, 'ttf', 'TrueType', 'NZNDCL+CourierNewPSMT', 'R14', ''] + [32, 'ttf', 'TrueType', 'FNUUTH+Calibri-Bold', 'R8', ''] + [28, 'ttf', 'TrueType', 'NOHSJV+Calibri-Light', 'R12', ''] + [8, 'ttf', 'Type0', 'ECPLRU+Calibri', 'R23', 'Identity-H'] + + .. note:: This list has no duplicate entries: the combination of :data:`xref` and *name* is unique. But by themselves, each of the two may occur multiple times. Duplicate *name* entries indicate the presence of "Form XObjects" on the page, e.g. generated by :meth:`Page.showPDFpage`. + + .. method:: getPageText(pno, output="text") + + Extracts the text of a page given its page number *pno* (zero-based). Invokes :meth:`Page.getText`. + + :arg int pno: page number, 0-based, any value *-inf < pno < pageCount*. + + :arg str output: A string specifying the requested output format: text, html, json or xml. Default is *text*. + + :rtype: str + + .. index:: + pair: fontsize; layout (Document method) + pair: rect; layout (Document method) + pair: width; layout (Document method) + pair: height; layout (Document method) + + .. method:: layout(rect=None, width=0, height=0, fontsize=11) + + Re-paginate ("reflow") the document based on the given page dimension and fontsize. This only affects some document types like e-books and HTML. Ignored if not supported. Supported documents have *True* in property :attr:`isReflowable`. + + :arg rect_like rect: desired page size. Must be finite, not empty and start at point (0, 0). + :arg float width: use it together with *height* as alternative to *rect*. + :arg float height: use it together with *width* as alternative to *rect*. + :arg float fontsize: the desired default fontsize. + + .. method:: select(s) + + PDF only: Keeps only those pages of the document whose numbers occur in the list. Empty sequences or elements outside *range(len(doc))* will cause a *ValueError*. For more details see remarks at the bottom or this chapter. + + :arg sequence s: The sequence (see :ref:`SequenceTypes`) of page numbers (zero-based) to be included. Pages not in the sequence will be deleted (from memory) and become unavailable until the document is reopened. **Page numbers can occur multiple times and in any order:** the resulting document will reflect the sequence exactly as specified. + + .. note:: + + * Page numbers in the sequence need not be unique nor be in any particular order. This makes the method a versatile utility to e.g. select only the even or the odd pages or meeting some other criteria and so forth. + + * On a technical level, the method will always create a new :data:`pagetree`. + + * When dealing with only a few pages, methods :meth:`copyPage`, :meth:`movePage`, :meth:`deletePage` are easier to use. In fact, they are also **much faster** -- by at least one order of magnitude when the document has many pages. + + + .. method:: setMetadata(m) + + PDF only: Sets or updates the metadata of the document as specified in *m*, a Python dictionary. As with :meth:`select`, these changes become permanent only when you save the document. Incremental save is supported. + + :arg dict m: A dictionary with the same keys as *metadata* (see below). All keys are optional. A PDF's format and encryption method cannot be set or changed and will be ignored. If any value should not contain data, do not specify its key or set the value to *None*. If you use *{}* all metadata information will be cleared to the string *"none"*. If you want to selectively change only some values, modify a copy of *doc.metadata* and use it as the argument. Arbitrary unicode values are possible if specified as UTF-8-encoded. + + .. method:: setToC(toc, collapse=1) + + PDF only: Replaces the **complete current outline** tree (table of contents) with the new one provided as the argument. After successful execution, the new outline tree can be accessed as usual via method *getToC()* or via property *outline*. Like with other output-oriented methods, changes become permanent only via *save()* (incremental save supported). Internally, this method consists of the following two steps. For a demonstration see example below. + + - Step 1 deletes all existing bookmarks. + + - Step 2 creates a new TOC from the entries contained in *toc*. + + :arg sequence toc: + + A Python sequence (list or tuple) with **all bookmark entries** that should form the new table of contents. Output variants of :meth:`getToC` are acceptable. To completely remove the table of contents specify an empty sequence or None. Each item must be a list with the following format. + + * [lvl, title, page [, dest]] where + + - **lvl** is the hierarchy level (int > 0) of the item, which **must be 1** for the first item and at most 1 larger than the previous one. + + - **title** (str) is the title to be displayed. It is assumed to be UTF-8-encoded (relevant for multibyte code points only). + + - **page** (int) is the target page number **(attention: 1-based)**. Must be in valid range if positive. Set it to -1 if there is no target, or the target is external. + + - **dest** (optional) is a dictionary or a number. If a number, it will be interpreted as the desired height (in points) this entry should point to on the page. Use a dictionary (like the one given as output by *getToC(False)*) if you want to store destinations that are either "named", or reside outside this document (other files, internet resources, etc.). + + :arg int collapse: *(new in version 1.16.9)* controls the hierarchy level beyond which outline entries should initially show up collapsed. The default 1 will hence only display level 1, higher levels must be expanded in the PDF viewer. To completely expand specify either a large integer, 0 or None. + + :rtype: int + :returns: the number of inserted, resp. deleted items. + + + .. method:: can_save_incrementally() + + *(New in version 1.16.0)* + + Check whether the document can be saved incrementally. Use it to choose the right option without encountering exceptions. + + .. method:: scrub(attached_files=True, clean_pages=True, embedded_files=True, hidden_text=True, javascript=True, metadata=True, redactions=True, remove_links=True, reset_fields=True, reset_responses=True, xml_metadata=True) + + PDF only: *(New in v1.16.14)* Remove potentially sensitive data from the PDF. This function is inspired by the similar "Sanitize" function in Adobe Acrobat products. The process is configurable by a number of options, which are all *True* by default. + + :arg bool attached_files: Search for 'FileAttachment' annotations and remove the file content. + :arg bool clean_pages: Remove any comments from page painting sources. If this option is set to *False*, then this is also done for *hidden_text* and *redactions*. + :arg bool embedded_files: Remove embedded files. + :arg bool hidden_text: Remove OCR-ed text and invisible text. + :arg bool javascript: Remove JavaScript sources. + :arg bool metadata: Remove PDF standard metadata. + :arg bool redactions: Apply redaction annotations. + :arg bool remove_links: Remove all links. + :arg bool reset_fields: Reset all form fields to their defaults. + :arg bool reset_responses: Remove all responses from all annotations. + :arg bool xml_metadata: Remove XML metadata. + + + .. method:: save(outfile, garbage=0, clean=False, deflate=False, incremental=False, ascii=False, expand=0, linear=False, pretty=False, encryption=PDF_ENCRYPT_NONE, permissions=-1, owner_pw=None, user_pw=None) + + PDF only: Saves the document in its **current state**. + + :arg str outfile: The file path to save to. Must be different from the original value if "incremental" is false or zero. When saving incrementally, "garbage" and "linear" **must be** false or zero and this parameter **must equal** the original filename (for convenience use *doc.name*). + + :arg int garbage: Do garbage collection. Positive values exclude "incremental". + + * 0 = none + * 1 = remove unused objects + * 2 = in addition to 1, compact the :data:`xref` table + * 3 = in addition to 2, merge duplicate objects + * 4 = in addition to 3, check object streams for duplication (may be slow) + + :arg bool clean: Clean and sanitize content streams [#f1]_. Corresponds to "mutool clean -sc". + + :arg bool deflate: Deflate (compress) uncompressed streams. + + :arg bool incremental: Only save changed objects. Excludes "garbage" and "linear". Cannot be used for files that are decrypted or repaired and also in some other cases. To be sure, check :meth:`Document.can_save_incrementally`. If this is false, saving to a new file is required. + + :arg bool ascii: convert binary data to ASCII. + + :arg int expand: Decompress objects. Generates versions that can be better read by some other programs and will lead to larger files. + + * 0 = none + * 1 = images + * 2 = fonts + * 255 = all + + :arg bool linear: Save a linearised version of the document. This option creates a file format for improved performance when read via internet connections. Excludes "incremental". + + :arg bool pretty: Prettify the document source for better readability. PDF objects will be reformatted to look like the default output of :meth:`Document.xrefObject`. + + :arg int permissions: *(new in version 1.16.0)* Set the desired permission levels. See :ref:`PermissionCodes` for possible values. Default is granting all. + + :arg int encryption: *(new in version 1.16.0)* set the desired encryption method. See :ref:`EncryptionMethods` for possible values. + + :arg str owner_pw: *(new in version 1.16.0)* set the document's owner password. + + :arg str user_pw: *(new in version 1.16.0)* set the document's user password. + + .. method:: saveIncr() + + PDF only: saves the document incrementally. This is a convenience abbreviation for *doc.save(doc.name, incremental=True, encryption=PDF_ENCRYPT_KEEP)*. + + + .. method:: write(garbage=0, clean=False, deflate=False, ascii=False, expand=0, linear=False, pretty=False, encryption=PDF_ENCRYPT_NONE, permissions=-1, owner_pw=None, user_pw=None) + + PDF only: Writes the **current content of the document** to a bytes object instead of to a file. Obviously, you should be wary about memory requirements. The meanings of the parameters exactly equal those in :meth:`save`. Chater :ref:`FAQ` contains an example for using this method as a pre-processor to `pdfrw `_. + + *(Changed in version 1.16.0)* for extended encryption support. + + :rtype: bytes + :returns: a bytes object containing the complete document. + + .. method:: searchPageFor(pno, text, hit_max=16, quads=False) + + Search for "text" on page number "pno". Works exactly like the corresponding :meth:`Page.searchFor`. Any integer -inf < pno < pageCount is acceptable. + + .. index:: + pair: from_page; insertPDF (Document method) + pair: to_page; insertPDF (Document method) + pair: start_at; insertPDF (Document method) + pair: rotate; insertPDF (Document method) + pair: links; insertPDF (Document method) + pair: annots; insertPDF (Document method) + + .. method:: insertPDF(docsrc, from_page=-1, to_page=-1, start_at=-1, rotate=-1, links=True, annots=True) + + PDF only: Copy the page range **[from_page, to_page]** (including both) of PDF document *docsrc* into the current one. Inserts will start with page number *start_at*. Negative values can be used to indicate default values. All pages thus copied will be rotated as specified. Links can be excluded in the target, see below. All page numbers are zero-based. + + :arg docsrc: An opened PDF *Document* which must not be the current document object. However, it may refer to the same underlying file. + :type docsrc: *Document* + + :arg int from_page: First page number in *docsrc*. Default is zero. + + :arg int to_page: Last page number in *docsrc* to copy. Default is the last page. + + :arg int start_at: First copied page will become page number *start_at* in the destination. If omitted, the page range will be appended to current document. If zero, the page range will be inserted before current first page. + + :arg int rotate: All copied pages will be rotated by the provided value (degrees, integer multiple of 90). + + :arg bool links: Choose whether (internal and external) links should be included in the copy. Default is *True*. An **internal link is always excluded**, if its destination is not one of the copied pages. + :arg bool annots: *(new in version 1.16.1)* choose whether annotations should be included in the copy. + + .. note:: + + 1. If *from_page > to_page*, pages will be **copied in reverse order**. If *0 <= from_page == to_page*, then one page will be copied. + + 2. *docsrc* bookmarks **will not be copied**. It is easy however, to recover a table of contents for the resulting document. Look at the examples below and at program `PDFjoiner.py `_ in the *examples* directory: it can join PDF documents and at the same time piece together respective parts of the tables of contents. + + .. index:: + pair: width; newPage (Document method) + pair: height; newPage (Document method) + + .. method:: newPage(pno=-1, width=595, height=842) + + PDF only: Insert an empty page. + + :arg int pno: page number in front of which the new page should be inserted. Must be in *1 < pno <= pageCount*. Special values -1 and *len(doc)* insert **after** the last page. + + :arg float width: page width. + :arg float height: page height. + + :rtype: :ref:`Page` + :returns: the created page object. + + .. index:: + pair: fontsize; insertPage (Document method) + pair: width; insertPage (Document method) + pair: height; insertPage (Document method) + pair: fontname; insertPage (Document method) + pair: fontfile; insertPage (Document method) + pair: color; insertPage (Document method) + + .. method:: insertPage(pno, text=None, fontsize=11, width=595, height=842, fontname="helv", fontfile=None, color=None) + + PDF only: Insert a new page and insert some text. Convenience function which combines :meth:`Document.newPage` and (parts of) :meth:`Page.insertText`. + + :arg int pno: page number (0-based) **in front of which** to insert. Must be in *range(-1, len(doc) + 1)*. Special values -1 and *len(doc)* insert **after** the last page. + + Changed in version 1.14.12 + This is now a positional parameter + + For the other parameters, please consult the aforementioned methods. + + :rtype: int + :returns: the result of :meth:`Page.insertText` (number of successfully inserted lines). + + .. method:: deletePage(pno=-1) + + PDF only: Delete a page given by its 0-based number in -inf < pno < pageCount - 1. + + Changed in version 1.14.17 + + :arg int pno: the page to be deleted. Negative number count backwards from the end of the document (like with indices). Default is the last page. + + .. method:: deletePageRange(from_page=-1, to_page=-1) + + PDF only: Delete a range of pages given as 0-based numbers. Any *-1* parameter will first be replaced by *len(doc) - 1* (ie. last page number). After that, condition *0 <= from_page <= to_page < len(doc)* must be true. If the parameters are equal, this is equivalent to :meth:`deletePage`. + + *(Changed in version 1.14.17)* Table of contents and internal links are now resynchronized. + + :arg int from_page: the first page to be deleted. + + :arg int to_page: the last page to be deleted. + + .. note:: + + In an effort to maintain a valid PDF structure, this method and :meth:`deletePage` will also remove the deleted pages from the table of contents. + + Similarly, it will **scan all pages** of the PDF and remove any links that point to deleted pages. This action may have an extended response time for documents with a lot of pages. + + The **number of deleted pages** has a very small response time effect. Therefore, whenever possible, delete page **ranges** instead of single pages. + + Example: Delete the page range 500 to 520 from a large PDF, using different methods. + + Method 1 - *deletePageRange*:: + + import time, fitz + doc = fitz.open("Adobe PDF Reference 1-7.pdf") + t0=time.perf_counter();doc.deletePageRange(500, 520);t1=time.perf_counter() + round(t1 - t0, 2) + 0.66 + + + Method 2 - *select*, this is more than 10 times **slower**:: + + l = list(range(500)) + list(range(521, 1310)) + t0=time.perf_counter();doc.select(l);t1=time.perf_counter() + round(t1 - t0, 2) + 7.62 + + + .. method:: copyPage(pno, to=-1) + + PDF only: Copy a page reference within the document. + + :arg int pno: the page to be copied. Must be in range *0 <= pno < len(doc)*. + + :arg int to: the page number in front of which to copy. The default inserts **after** the last page. + + .. note:: Only a new **reference** to the page object will be created -- not a new page object, all copied pages will have identical attribute values, including the :attr:`Page.xref`. This implies that any changes to one of these copies will appear on all of them. + + .. method:: fullcopyPage(pno, to=-1) + + *(New in version 1.14.17)* + + PDF only: Make a new copy (duplicate) of a page. + + :arg int pno: the page to be duplicated. Must be in range *0 <= pno < len(doc)*. + + :arg int to: the page number in front of which to copy. The default inserts **after** the last page. + + .. note:: + + * In contrast to :meth:`copyPage`, this method creates a new page object (with a new :data:`xref`), which can be changed independently from the original. + + * Any Popup and "IRT" ("in response to") annotations are **not copied** to avoid potentially incorrect situations. + + .. method:: movePage(pno, to=-1) + + PDF only: Move (copy and then delete original) a page within the document. + + :arg int pno: the page to be moved. Must be in range *0 <= pno < len(doc)*. + + :arg int to: the page number in front of which to insert the moved page. The default moves **after** the last page. + + + .. method:: need_appearances(value=None) + + *(New in v1.17.4)* + + PDF only: Get or set the */NeedAppearances* property of Form PDFs. Quote: *"(Optional) A flag specifying whether to construct appearance streams and appearance dictionaries for all widget annotations in the document ... Default value: false."* This may help controlling the behavior of some readers / viewers. + + :arg bool value: set the property to this value. If omitted or *None*, inquire the current value. + + :rtype: bool + :returns: + * None: not a Form PDF or property not defined. + * True / False: the value of the property (either just set or existing for inquiries). + + Once set, the property cannot be removed again (which is no problem). + + + .. method:: getSigFlags() + + PDF only: Return whether the document contains signature fields. This is an optional PDF property: if not present (return value -1), no conclusions can be drawn -- the PDF creator may just not have bothered to use it. + + :rtype: int + :returns: + * -1: not a Form PDF / no signature fields recorded / no *SigFlags* found. + * 1: at least one signature field exists. + * 3: contains signatures that may be invalidated if the file is saved (written) in a way that alters its previous contents, as opposed to an incremental update. + + .. index:: + pair: filename; embeddedFileAdd (Document method) + pair: ufilename; embeddedFileAdd (Document method) + pair: desc; embeddedFileAdd (Document method) + + .. method:: embeddedFileAdd(name, buffer, filename=None, ufilename=None, desc=None) + + PDF only: Embed a new file. All string parameters except the name may be unicode (in previous versions, only ASCII worked correctly). File contents will be compressed (where beneficial). + + Changed in version 1.14.16 + The sequence of positional parameters "name" and "buffer" has been changed to comply with the layout of other functions. + + :arg str name: entry identifier, must not already exist. + :arg bytes,bytearray,BytesIO buffer: file contents. + + *(Changed in version 1.14.13)* *io.BytesIO* is now also supported. + + :arg str filename: optional filename. Documentation only, will be set to *name* if *None*. + :arg str ufilename: optional unicode filename. Documentation only, will be set to *filename* if *None*. + :arg str desc: optional description. Documentation only, will be set to *name* if *None*. + + + .. method:: embeddedFileCount() + + PDF only: Return the number of embedded files. + + Changed in version 1.14.16 + This is now a method. In previous versions, this was a property. + + .. method:: embeddedFileGet(item) + + PDF only: Retrieve the content of embedded file by its entry number or name. If the document is not a PDF, or entry cannot be found, an exception is raised. + + :arg int,str item: index or name of entry. An integer must be in *range(embeddedFileCount())*. + + :rtype: bytes + + .. method:: embeddedFileDel(item) + + PDF only: Remove an entry from `/EmbeddedFiles`. As always, physical deletion of the embedded file content (and file space regain) will occur only when the document is saved to a new file with a suitable garbage option. + + Changed in version 1.14.16 + Items can now be deleted by index, too. + + :arg int/str item: index or name of entry. + + .. warning:: When specifying an entry name, this function will only **delete the first item** with that name. Be aware that PDFs not created with PyMuPDF may contain duplicate names. So you may want to take appropriate precautions. + + .. method:: embeddedFileInfo(item) + + PDF only: Retrieve information of an embedded file given by its number or by its name. + + :arg int/str item: index or name of entry. An integer must be in *range(embeddedFileCount())*. + + :rtype: dict + :returns: a dictionary with the following keys: + + * *name* -- (*str*) name under which this entry is stored + * *filename* -- (*str*) filename + * *ufilename* -- (*unicode*) filename + * *desc* -- (*str*) description + * *size* -- (*int*) original file size + * *length* -- (*int*) compressed file length + + .. method:: embeddedFileNames() + + *(New in version 1.14.16)* + + PDF only: Return a list of embedded file names. The sequence of names equals the physical sequence in the document. + + :rtype: list + + .. index:: + pair: filename; embeddedFileUpd (Document method) + pair: ufilename; embeddedFileUpd (Document method) + pair: desc; embeddedFileUpd (Document method) + + .. method:: embeddedFileUpd(item, buffer=None, filename=None, ufilename=None, desc=None) + + PDF only: Change an embedded file given its entry number or name. All parameters are optional. Letting them default leads to a no-operation. + + :arg int/str item: index or name of entry. An integer must be in *range(0, embeddedFileCount())*. + :arg bytes,bytearray,BytesIO buffer: the new file content. + + *(Changed in version 1.14.13)* *io.BytesIO* is now also supported. + + :arg str filename: the new filename. + :arg str ufilename: the new unicode filename. + :arg str desc: the new description. + + .. method:: embeddedFileSetInfo(n, filename=None, ufilename=None, desc=None) + + PDF only: Change embedded file meta information. All parameters are optional. Letting them default will lead to a no-operation. + + :arg int,str n: index or name of entry. An integer must be in *range(embeddedFileCount())*. + :arg str filename: sets the filename. + :arg str ufilename: sets the unicode filename. + :arg str desc: sets the description. + + .. note:: Deprecated subset of :meth:`embeddedFileUpd`. Will be deleted in a future version. + + .. method:: close() + + Release objects and space allocations associated with the document. If created from a file, also closes *filename* (releasing control to the OS). + + .. method:: xrefObject(xref, compressed=False, ascii=False) + + *(New in version 1.16.8)* + + PDF only: Return the definition of a PDF object. For details please refer to :meth:`Document.xrefObject`. + + .. method:: PDFCatalog() + + *(New in version 1.16.8)* + + PDF only: Return the :data:`xref` of the PDF catalog (or root) object. For details please refer to :meth:`Document._getPDFroot`. + + + .. method:: PDFTrailer(compressed=False) + + *(New in version 1.16.8)* + + PDF only: Return the trailer of the PDF (UTF-8), which is usually located at the PDF file's end. For details please refer to :meth:`Document._getTrailerString`. + + + .. method:: metadataXML() + + *(New in version 1.16.8)* + + PDF only: Return the :data:`xref` of the document's XML metadata. For details please refer to :meth:`Document._getXmlMetadataXref`. + + .. method:: xrefStream(xref) + + *(New in version 1.16.8)* + + PDF only: Return the **decompressed** contents of the :data:`xref` stream object. For details please refer to :meth:`Document._getXrefStream`. + + .. method:: xrefStreamRaw(xref) + + *(New in version 1.16.8)* + + PDF only: Return the **unmodified** contents of the :data:`xref` stream object. Otherwise equal to :meth:`Document.xrefStream`. + + .. method:: updateObject(xref, obj_str, page=None) + + *(New in version 1.16.8)* + + PDF only: Update object at :data:`xref`. For details please refer to :meth:`Document._updateObject`. + + .. method:: updateStream(xref, data, new=False) + + *(New in version 1.16.8)* + + PDF only: Repleace the stream at :data`xref`. For details please refer to :meth:`Document._updateStream`. + + + .. attribute:: outline + + Contains the first :ref:`Outline` entry of the document (or *None*). Can be used as a starting point to walk through all outline items. Accessing this property for encrypted, not authenticated documents will raise an *AttributeError*. + + :type: :ref:`Outline` + + .. attribute:: isClosed + + *False* if document is still open. If closed, most other attributes and methods will have been deleted / disabled. In addition, :ref:`Page` objects referring to this document (i.e. created with :meth:`Document.loadPage`) and their dependent objects will no longer be usable. For reference purposes, :attr:`Document.name` still exists and will contain the filename of the original document (if applicable). + + :type: bool + + .. attribute:: isPDF + + *True* if this is a PDF document, else *False*. + + :type: bool + + .. attribute:: isFormPDF + + *False* if this is not a PDF or has no form fields, otherwise the number of root form fields (fields with no ancestors). + + Changed in version 1.16.4 Returns the total number of (root) form fields. + + :type: bool,int + + .. attribute:: isReflowable + + *True* if document has a variable page layout (like e-books or HTML). In this case you can set the desired page dimensions during document creation (open) or via method :meth:`layout`. + + :type: bool + + .. attribute:: needsPass + + Indicates whether the document is password-protected against access. This indicator remains unchanged -- **even after the document has been authenticated**. Precludes incremental saves if true. + + :type: bool + + .. attribute:: isEncrypted + + This indicator initially equals *needsPass*. After successful authentication, it is set to *False* to reflect the situation. + + :type: bool + + .. attribute:: permissions + + Contains the permissions to access the document. This is an integer containing bool values in respective bit positions. For example, if *doc.permissions & fitz.PDF_PERM_MODIFY > 0*, you may change the document. See :ref:`PermissionCodes` for details. + + Changed in version 1.16.0 This is now an integer comprised of bit indicators. Was a dictionary previously. + + :type: int + + .. attribute:: metadata + + Contains the document's meta data as a Python dictionary or *None* (if *isEncrypted=True* and *needPass=True*). Keys are *format*, *encryption*, *title*, *author*, *subject*, *keywords*, *creator*, *producer*, *creationDate*, *modDate*. All item values are strings or *None*. + + Except *format* and *encryption*, for PDF documents, the key names correspond in an obvious way to the PDF keys */Creator*, */Producer*, */CreationDate*, */ModDate*, */Title*, */Author*, */Subject*, and */Keywords* respectively. + + - *format* contains the document format (e.g. 'PDF-1.6', 'XPS', 'EPUB'). + + - *encryption* either contains *None* (no encryption), or a string naming an encryption method (e.g. *'Standard V4 R4 128-bit RC4'*). Note that an encryption method may be specified **even if** *needsPass=False*. In such cases not all permissions will probably have been granted. Check :attr:`Document.permissions` for details. + + - If the date fields contain valid data (which need not be the case at all!), they are strings in the PDF-specific timestamp format "D:", where + + - is the 12 character ISO timestamp *YYYYMMDDhhmmss* (*YYYY* - year, *MM* - month, *DD* - day, *hh* - hour, *mm* - minute, *ss* - second), and + + - is a time zone value (time intervall relative to GMT) containing a sign ('+' or '-'), the hour (*hh*), and the minute (*'mm'*, note the apostrophies!). + + - A Paraguayan value might hence look like *D:20150415131602-04'00'*, which corresponds to the timestamp April 15, 2015, at 1:16:02 pm local time Asuncion. + + :type: dict + + .. Attribute:: name + + Contains the *filename* or *filetype* value with which *Document* was created. + + :type: str + + .. Attribute:: pageCount + + Contains the number of pages of the document. May return 0 for documents with no pages. Function *len(doc)* will also deliver this result. + + :type: int + + .. Attribute:: chapterCount + + *(New in version 1.17.0)* + Contains the number of chapters in the document. Always at least 1. Relevant only for document types with chapter support (EPUB currently). Other documents will return 1. + + :type: int + + .. Attribute:: lastLocation + + *(New in version 1.17.0)* + Contains (chapter, pno) of the document's last page. Relevant only for document types with chapter support (EPUB currently). Other documents will return *(0, len(doc) - 1)* and *(0, -1)* if it has no pages. + + :type: int + + .. Attribute:: FormFonts + + A list of form field font names defined in the */AcroForm* object. *None* if not a PDF. + + :type: list + +.. NOTE:: For methods that change the structure of a PDF (:meth:`insertPDF`, :meth:`select`, :meth:`copyPage`, :meth:`deletePage` and others), be aware that objects or properties in your program may have been invalidated or orphaned. Examples are :ref:`Page` objects and their children (links, annotations, widgets), variables holding old page counts, tables of content and the like. Remember to keep such variables up to date or delete orphaned objects. Also refer to :ref:`ReferenialIntegrity`. + +:meth:`setMetadata` Example +------------------------------- +Clear metadata information. If you do this out of privacy / data protection concerns, make sure you save the document as a new file with *garbage > 0*. Only then the old */Info* object will also be physically removed from the file. In this case, you may also want to clear any XML metadata inserted by several PDF editors: + +>>> import fitz +>>> doc=fitz.open("pymupdf.pdf") +>>> doc.metadata # look at what we currently have +{'producer': 'rst2pdf, reportlab', 'format': 'PDF 1.4', 'encryption': None, 'author': +'Jorj X. McKie', 'modDate': "D:20160611145816-04'00'", 'keywords': 'PDF, XPS, EPUB, CBZ', +'title': 'The PyMuPDF Documentation', 'creationDate': "D:20160611145816-04'00'", +'creator': 'sphinx', 'subject': 'PyMuPDF 1.9.1'} +>>> doc.setMetadata({}) # clear all fields +>>> doc.metadata # look again to show what happened +{'producer': 'none', 'format': 'PDF 1.4', 'encryption': None, 'author': 'none', +'modDate': 'none', 'keywords': 'none', 'title': 'none', 'creationDate': 'none', +'creator': 'none', 'subject': 'none'} +>>> doc._delXmlMetadata() # clear any XML metadata +>>> doc.save("anonymous.pdf", garbage = 4) # save anonymized doc + +:meth:`setToC` Demonstration +---------------------------------- +This shows how to modify or add a table of contents. Also have a look at `csv2toc.py `_ and `toc2csv.py `_ in the examples directory. + +>>> import fitz +>>> doc = fitz.open("test.pdf") +>>> toc = doc.getToC() +>>> for t in toc: print(t) # show what we have +[1, 'The PyMuPDF Documentation', 1] +[2, 'Introduction', 1] +[3, 'Note on the Name fitz', 1] +[3, 'License', 1] +>>> toc[1][1] += " modified by setToC" # modify something +>>> doc.setToC(toc) # replace outline tree +3 # number of bookmarks inserted +>>> for t in doc.getToC(): print(t) # demonstrate it worked +[1, 'The PyMuPDF Documentation', 1] +[2, 'Introduction modified by setToC', 1] # <<< this has changed +[3, 'Note on the Name fitz', 1] +[3, 'License', 1] + +:meth:`insertPDF` Examples +---------------------------- +**(1) Concatenate two documents including their TOCs:** + +>>> doc1 = fitz.open("file1.pdf") # must be a PDF +>>> doc2 = fitz.open("file2.pdf") # must be a PDF +>>> pages1 = len(doc1) # save doc1's page count +>>> toc1 = doc1.getToC(False) # save TOC 1 +>>> toc2 = doc2.getToC(False) # save TOC 2 +>>> doc1.insertPDF(doc2) # doc2 at end of doc1 +>>> for t in toc2: # increase toc2 page numbers + t[2] += pages1 # by old len(doc1) +>>> doc1.setToC(toc1 + toc2) # now result has total TOC + +Obviously, similar ways can be found in more general situations. Just make sure that hierarchy levels in a row do not increase by more than one. Inserting dummy bookmarks before and after *toc2* segments would heal such cases. A ready-to-use GUI (wxPython) solution can be found in script `PDFjoiner.py `_ of the examples directory. + +**(2) More examples:** + +>>> # insert 5 pages of doc2, where its page 21 becomes page 15 in doc1 +>>> doc1.insertPDF(doc2, from_page=21, to_page=25, start_at=15) + +>>> # same example, but pages are rotated and copied in reverse order +>>> doc1.insertPDF(doc2, from_page=25, to_page=21, start_at=15, rotate=90) + +>>> # put copied pages in front of doc1 +>>> doc1.insertPDF(doc2, from_page=21, to_page=25, start_at=0) + +Other Examples +---------------- +**Extract all page-referenced images of a PDF into separate PNG files**:: + + for i in range(len(doc)): + imglist = doc.getPageImageList(i) + for img in imglist: + xref = img[0] # xref number + pix = fitz.Pixmap(doc, xref) # make pixmap from image + if pix.n - pix.alpha < 4: # can be saved as PNG + pix.writePNG("p%s-%s.png" % (i, xref)) + else: # CMYK: must convert first + pix0 = fitz.Pixmap(fitz.csRGB, pix) + pix0.writePNG("p%s-%s.png" % (i, xref)) + pix0 = None # free Pixmap resources + pix = None # free Pixmap resources + +**Rotate all pages of a PDF:** + +>>> for page in doc: page.setRotation(90) + +.. rubric:: Footnotes + +.. [#f1] Content streams describe what (e.g. text or images) appears where and how on a page. PDF uses a specialized mini language similar to PostScript to do this (pp. 985 in :ref:`AdobeManual`), which gets interpreted when a page is loaded. + +.. [#f2] However, you **can** use :meth:`Document.getToC` and :meth:`Page.getLinks` (which are available for all document types) and copy this information over to the output PDF. See demo `pdf-converter.py `_. + +.. [#f3] For applicable (EPUB) document types, loading a page via its absolute number may result in layouting a large part of the document, before the page can be accessed. To avoid this performance impact, prefer chapter-based access. Use convenience methods / attributes :meth:`Document.nextLocation`, :meth:`Document.previousLocation` and :attr:`Document.lastLocation` for maintaining a high level of coding efficiency. diff --git a/docs/faq.rst b/docs/faq.rst new file mode 100644 index 0000000..db6cc13 --- /dev/null +++ b/docs/faq.rst @@ -0,0 +1,2135 @@ +.. _FAQ: + +============================== +Collection of Recipes +============================== + +.. highlight:: python + +A collection of recipes in "How-To" format for using PyMuPDF. We aim to extend this section over time. Where appropriate we will refer to the corresponding `Wiki `_ pages, but some duplication may still occur. + +---------- + +Images +------- + +---------- + +How to Make Images from Document Pages +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This little script will take a document filename and generate a PNG file from each of its pages. + +The document can be any supported type like PDF, XPS, etc. + +The script works as a command line tool which expects the filename being supplied as a parameter. The generated image files (1 per page) are stored in the directory of the script:: + + import sys, fitz # import the binding + fname = sys.argv[1] # get filename from command line + doc = fitz.open(fname) # open document + for page in doc: # iterate through the pages + pix = page.getPixmap(alpha = False) # render page to an image + pix.writePNG("page-%i.png" % page.number) # store image as a PNG + +The script directory will now contain PNG image files named *page-0.png*, *page-1.png*, etc. Pictures have the dimension of their pages, e.g. 595 x 842 pixels for an A4 portrait sized page. They will have a resolution of 72 dpi in x and y dimension and have no transparency. You can change all that -- for how to do do this, read the next sections. + +---------- + +How to Increase :index:`Image Resolution ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The image of a document page is represented by a :ref:`Pixmap`, and the simplest way to create a pixmap is via method :meth:`Page.getPixmap`. + +This method has many options for influencing the result. The most important among them is the :ref:`Matrix`, which lets you :index:`zoom`, rotate, distort or mirror the outcome. + +:meth:`Page.getPixmap` by default will use the :ref:`Identity` matrix, which does nothing. + +In the following, we apply a :index:`zoom factor ` of 2 to each dimension, which will generate an image with a four times better resolution for us (and also about 4 times the size):: + + zoom_x = 2.0 # horizontal zoom + zomm_y = 2.0 # vertical zoom + mat = fitz.Matrix(zoom_x, zomm_y) # zoom factor 2 in each dimension + pix = page.getPixmap(matrix = mat) # use 'mat' instead of the identity matrix + + +---------- + +How to Create :index:`Partial Pixmaps` (Clips) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +You do not always need the full image of a page. This may be the case e.g. when you display the image in a GUI and would like to zoom into a part of the page. + +Let's assume your GUI window has room to display a full document page, but you now want to fill this room with the bottom right quarter of your page, thus using a four times better resolution. + +To achieve this, we define a rectangle equal to the area we want to appear in the GUI and call it "clip". One way of constructing rectangles in PyMuPDF is by providing two diagonally opposite corners, which is what we are doing here. + +.. image:: images/img-clip.jpg + :scale: 80 + +:: + + mat = fitz.Matrix(2, 2) # zoom factor 2 in each direction + rect = page.rect # the page rectangle + mp = rect.tl + (rect.br - rect.tl) * 0.5 # its middle point + clip = fitz.Rect(mp, rect.br) # the area we want + pix = page.getPixmap(matrix=mat, clip=clip) + +In the above we construct *clip* by specifying two diagonally opposite points: the middle point *mp* of the page rectangle, and its bottom right, *rect.br*. + +---------- + +How to Create or Suppress Annotation Images +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Normally, the pixmap of a page also shows the page's annotations. Occasionally, this may not be desireable. + +To suppress the annotation images on a rendered page, just specify *annots=False* in :meth:`Page.getPixmap`. + +You can also render annotations separately: :ref:`Annot` objects have their own :meth:`Annot.getPixmap` method. The resulting pixmap has the same dimensions as the annotation rectangle. + +---------- + +.. index:: + triple: extract;image;non-PDF + pair: convertToPDF;examples + +How to Extract Images: Non-PDF Documents +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In contrast to the previous sections, this section deals with **extracting** images **contained** in documents, so they can be displayed as part of one or more pages. + +If you want recreate the original image in file form or as a memory area, you have basically two options: + +1. Convert your document to a PDF, and then use one of the PDF-only extraction methods. This snippet will convert a document to PDF:: + + >>> pdfbytes = doc.convertToPDF() # this a bytes object + >>> pdf = fitz.open("pdf", pdfbytes) # open it as a PDF document + >>> # now use 'pdf' like any PDF document + +2. Use :meth:`Page.getText` with the "dict" parameter. This will extract all text and images shown on the page, formatted as a Python dictionary. Every image will occur in an image block, containing meta information and the binary image data. For details of the dictionary's structure, see :ref:`TextPage`. The method works equally well for PDF files. This creates a list of all images shown on a page:: + + >>> d = page.getText("dict") + >>> blocks = d["blocks"] + >>> imgblocks = [b for b in blocks if b["type"] == 1] + +Each item if "imgblocks" is a dictionary which looks like this:: + + {"type": 1, "bbox": (x0, y0, x1, y1), "width": w, "height": h, "ext": "png", "image": b"..."} + +---------- + +.. index:: + triple: extract;image;PDF + pair: extractImage;examples + +How to Extract Images: PDF Documents +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Like any other "object" in a PDF, images are identified by a cross reference number (:data:`xref`, an integer). If you know this number, you have two ways to access the image's data: + +1. **Create** a :ref:`Pixmap` of the image with instruction *pix = fitz.Pixmap(doc, xref)*. This method is **very** fast (single digit micro-seconds). The pixmap's properties (width, height, ...) will reflect the ones of the image. In this case there is no way to tell which image format the embedded original has. + +2. **Extract** the image with *img = doc.extractImage(xref)*. This is a dictionary containing the binary image data as *img["image"]*. A number of meta data are also provided -- mostly the same as you would find in the pixmap of the image. The major difference is string *img["ext"]*, which specifies the image format: apart from "png", strings like "jpeg", "bmp", "tiff", etc. can also occur. Use this string as the file extension if you want to store to disk. The execution speed of this method should be compared to the combined speed of the statements *pix = fitz.Pixmap(doc, xref);pix.getPNGData()*. If the embedded image is in PNG format, the speed of :meth:`Document.extractImage` is about the same (and the binary image data are identical). Otherwise, this method is **thousands of times faster**, and the **image data is much smaller**. + +The question remains: **"How do I know those 'xref' numbers of images?"**. There are two answers to this: + +a. **"Inspect the page objects:"** Loop through the items of :meth:`Page.getImageList`. It is a list of list, and its items look like *[xref, smask, ...]*, containing the :data:`xref` of an image. This :data:`xref` can then be used with one of the above methods. Use this method for **valid (undamaged)** documents. Be wary however, that the same image may be referenced multiple times (by different pages), so you might want to provide a mechanism avoiding multiple extracts. +b. **"No need to know:"** Loop through the list of **all xrefs** of the document and perform a :meth:`Document.extractImage` for each one. If the returned dictionary is empty, then continue -- this :data:`xref` is no image. Use this method if the PDF is **damaged (unusable pages)**. Note that a PDF often contains "pseudo-images" ("stencil masks") with the special purpose of defining the transparency of some other image. You may want to provide logic to exclude those from extraction. Also have a look at the next section. + +For both extraction approaches, there exist ready-to-use general purpose scripts: + +`extract-imga.py `_ extracts images page by page: + +.. image:: images/img-extract-imga.jpg + :scale: 80 + +and `extract-imgb.py `_ extracts images by xref table: + +.. image:: images/img-extract-imgb.jpg + :scale: 80 + +---------- + +How to Handle Stencil Masks +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Some images in PDFs are accompanied by **stencil masks**. In their simplest form stencil masks represent alpha (transparency) bytes stored as seperate images. In order to reconstruct the original of an image, which has a stencil mask, it must be "enriched" with transparency bytes taken from its stencil mask. + +Whether an image does have such a stencil mask can be recognized in one of two ways in PyMuPDF: + +1. An item of :meth:`Document.getPageImageList` has the general format *[xref, smask, ...]*, where *xref* is the image's :data:`xref` and *smask*, if positive, is the :data:`xref` of a stencil mask. +2. The (dictionary) results of :meth:`Document.extractImage` have a key *"smask"*, which also contains any stencil mask's :data:`xref` if positive. + +If *smask == 0* then the image encountered via :data:`xref` can be processed as it is. + +To recover the original image using PyMuPDF, the procedure depicted as follows must be executed: + +.. image:: images/img-stencil.jpg + :scale: 60 + +:: + pix1 = fitz.Pixmap(doc, xref) # (1) pixmap of image w/o alpha + pix2 = fitz.Pixmap(doc, smask) # (2) stencil pixmap + pix = fitz.Pixmap(pix1) # (3) copy of pix1, empty alpha channel added + pix.setAlpha(pix2.samples) # (4) fill alpha channel + +Step (1) creates a pixmap of the "netto" image. Step (2) does the same with the stencil mask. Please note that the :attr:`Pixmap.samples` attribute of *pix2* contains the alpha bytes that must be stored in the final pixmap. This is what happens in step (3) and (4). + +The scripts `extract-imga.py `_, and `extract-imgb.py `_ above also contain this logic. + +---------- + +.. index:: + triple: picture;embed;PDF + pair: showPDFpage;examples + pair: insertImage;examples + pair: embeddedFileAdd;examples + pair: addFileAnnot;examples + +How to Make one PDF of all your Pictures (or Files) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +We show here **three scripts** that take a list of (image and other) files and put them all in one PDF. + +**Method 1: Inserting Images as Pages** + +The first one converts each image to a PDF page with the same dimensions. The result will be a PDF with one page per image. It will only work for supported image file formats:: + + import os, fitz + import PySimpleGUI as psg # for showing a progress bar + doc = fitz.open() # PDF with the pictures + imgdir = "D:/2012_10_05" # where the pics are + imglist = os.listdir(imgdir) # list of them + imgcount = len(imglist) # pic count + + for i, f in enumerate(imglist): + img = fitz.open(os.path.join(imgdir, f)) # open pic as document + rect = img[0].rect # pic dimension + pdfbytes = img.convertToPDF() # make a PDF stream + img.close() # no longer needed + imgPDF = fitz.open("pdf", pdfbytes) # open stream as PDF + page = doc.newPage(width = rect.width, # new page with ... + height = rect.height) # pic dimension + page.showPDFpage(rect, imgPDF, 0) # image fills the page + psg.EasyProgressMeter("Import Images", # show our progress + i+1, imgcount) + + doc.save("all-my-pics.pdf") + +This will generate a PDF only marginally larger than the combined pictures' size. Some numbers on performance: + +The above script needed about 1 minute on my machine for 149 pictures with a total size of 514 MB (and about the same resulting PDF size). + +.. image:: images/img-import-progress.jpg + :scale: 80 + +Look `here `_ for a more complete source code: it offers a directory selection dialog and skips unsupported files and non-file entries. + +.. note:: We might have used :meth:`Page.insertImage` instead of :meth:`Page.showPDFpage`, and the result would have been a similar looking file. However, depending on the image type, it may store **images uncompressed**. Therefore, the save option *deflate = True* must be used to achieve a reasonable file size, which hugely increases the runtime for large numbers of images. So this alternative **cannot be recommended** here. + +**Method 2: Embedding Files** + +The second script **embeds** arbitrary files -- not only images. The resulting PDF will have just one (empty) page, required for technical reasons. To later access the embedded files again, you would need a suitable PDF viewer that can display and / or extract embedded files:: + + import os, fitz + import PySimpleGUI as psg # for showing progress bar + doc = fitz.open() # PDF with the pictures + imgdir = "D:/2012_10_05" # where my files are + + imglist = os.listdir(imgdir) # list of pictures + imgcount = len(imglist) # pic count + imglist.sort() # nicely sort them + + for i, f in enumerate(imglist): + img = open(os.path.join(imgdir,f), "rb").read() # make pic stream + doc.embeddedFileAdd(img, f, filename=f, # and embed it + ufilename=f, desc=f) + psg.EasyProgressMeter("Embedding Files", # show our progress + i+1, imgcount) + + page = doc.newPage() # at least 1 page is needed + + doc.save("all-my-pics-embedded.pdf") + +.. image:: images/img-embed-progress.jpg + :scale: 80 + +This is by far the fastest method, and it also produces the smallest possible output file size. The above pictures needed 20 seonds on my machine and yielded a PDF size of 510 MB. Look `here `_ for a more complete source code: it offers a direcory selection dialog and skips non-file entries. + +**Method 3: Attaching Files** + +A third way to achieve this task is **attaching files** via page annotations see `here `_ for the complete source code. + +This has a similar performance as the previous script and it also produces a similar file size. It will produce PDF pages which show a 'FileAttachment' icon for each attached file. + +.. image:: images/img-attach-result.jpg + +.. note:: Both, the **embed** and the **attach** methods can be used for **arbitrary files** -- not just images. + +.. note:: We strongly recommend using the awesome package `PySimpleGUI `_ to display a progress meter for tasks that may run for an extended time span. It's pure Python, uses Tkinter (no additional GUI package) and requires just one more line of code! + +---------- + +.. index:: + triple: vector;image;SVG + pair: showPDFpage;examples + pair: insertImage;examples + pair: embeddedFileAdd;examples + +How to Create Vector Images +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The usual way to create an image from a document page is :meth:`Page.getPixmap`. A pixmap represents a raster image, so you must decide on its quality (i.e. resolution) at creation time. It cannot be changed later. + +PyMuPDF also offers a way to create a **vector image** of a page in SVG format (scalable vector graphics, defined in XML syntax). SVG images remain precise across zooming levels (of course with the exception of any raster graphic elements embedded therein). + +Instruction *svg = page.getSVGimage(matrix = fitz.Identity)* delivers a UTF-8 string *svg* which can be stored with extension ".svg". + +---------- + +.. index:: + pair: writeImage;examples + pair: getImageData;examples + pair: Photoshop;examples + pair: Postscript;examples + pair: JPEG;examples + pair: PhotoImage;examples + +How to Convert Images +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Just as a feature among others, PyMuPDF's image conversion is easy. It may avoid using other graphics packages like PIL/Pillow in many cases. + +Notwithstanding that interfacing with Pillow is almost trivial. + +================= ================== ========================================= +**Input Formats** **Output Formats** **Description** +================= ================== ========================================= +BMP . Windows Bitmap +JPEG . Joint Photographic Experts Group +JXR . JPEG Extended Range +JPX . JPEG 2000 +GIF . Graphics Interchange Format +TIFF . Tagged Image File Format +PNG PNG Portable Network Graphics +PNM PNM Portable Anymap +PGM PGM Portable Graymap +PBM PBM Portable Bitmap +PPM PPM Portable Pixmap +PAM PAM Portable Arbitrary Map +. PSD Adobe Photoshop Document +. PS Adobe Postscript +================= ================== ========================================= + +The general scheme is just the following two lines:: + + pix = fitz.Pixmap("input.xxx") # any supported input format + pix.writeImage("output.yyy") # any supported output format + +**Remarks** + +1. The **input** argument of *fitz.Pixmap(arg)* can be a file or a bytes / io.BytesIO object containing an image. +2. Instead of an output **file**, you can also create a bytes object via *pix.getImageData("yyy")* and pass this around. +3. As a matter of course, input and output formats must be compatible in terms of colorspace and transparency. The *Pixmap* class has batteries included if adjustments are needed. + +.. note:: + **Convert JPEG to Photoshop**:: + + pix = fitz.Pixmap("myfamily.jpg") + pix.writeImage("myfamily.psd") + + +.. note:: + **Save to JPEG** using PIL/Pillow:: + + from PIL import Image + pix = fitz.Pixmap(...) + img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples) + img.save("output.jpg", "JPEG") + +.. note:: + Convert **JPEG to Tkinter PhotoImage**. Any **RGB / no-alpha** image works exactly the same. Conversion to one of the **Portable Anymap** formats (PPM, PGM, etc.) does the trick, because they are supported by all Tkinter versions:: + + if str is bytes: # this is Python 2! + import Tkinter as tk + else: # Python 3 or later! + import tkinter as tk + pix = fitz.Pixmap("input.jpg") # or any RGB / no-alpha image + tkimg = tk.PhotoImage(data=pix.getImageData("ppm")) + +.. note:: + Convert **PNG with alpha** to Tkinter PhotoImage. This requires **removing the alpha bytes**, before we can do the PPM conversion:: + + if str is bytes: # this is Python 2! + import Tkinter as tk + else: # Python 3 or later! + import tkinter as tk + pix = fitz.Pixmap("input.png") # may have an alpha channel + if pix.alpha: # we have an alpha channel! + pix = fitz.Pixmap(pix, 0) # remove it + tkimg = tk.PhotoImage(data=pix.getImageData("ppm")) + +---------- + +.. index:: + pair: copyPixmap;examples + +How to Use Pixmaps: Glueing Images +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This shows how pixmaps can be used for purely graphical, non-document purposes. The script reads an image file and creates a new image which consist of 3 * 4 tiles of the original:: + + import fitz + src = fitz.Pixmap("img-7edges.png") # create pixmap from a picture + col = 3 # tiles per row + lin = 4 # tiles per column + tar_w = src.width * col # width of target + tar_h = src.height * lin # height of target + + # create target pixmap + tar_pix = fitz.Pixmap(src.colorspace, (0, 0, tar_w, tar_h), src.alpha) + + # now fill target with the tiles + for i in range(col): + src.x = src.width * i # modify input's x coord + for j in range(lin): + src.y = src.height * j # modify input's y coord + tar_pix.copyPixmap(src, src.irect) # copy input to new loc + + tar_pix.writePNG("tar.png") + +This is the input picture: + +.. image:: images/img-7edges.png + :scale: 33 + +Here is the output: + +.. image:: images/img-target.png + :scale: 33 + +---------- + +.. index:: + pair: setRect;examples + pair: invertIRect;examples + pair: copyPixmap;examples + pair: writeImage;examples + +How to Use Pixmaps: Making a Fractal +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is another Pixmap example that creates **Sierpinski's Carpet** -- a fractal generalizing the **Cantor Set** to two dimensions. Given a square carpet, mark its 9 sub-suqares (3 times 3) and cut out the one in the center. Treat each of the remaining eight sub-squares in the same way, and continue *ad infinitum*. The end result is a set with area zero and fractal dimension 1.8928... + +This script creates a approximative PNG image of it, by going down to one-pixel granularity. To increase the image precision, change the value of n (precision):: + + import fitz, time + if not list(map(int, fitz.VersionBind.split("."))) >= [1, 14, 8]: + raise SystemExit("need PyMuPDF v1.14.8 for this script") + n = 6 # depth (precision) + d = 3**n # edge length + + t0 = time.perf_counter() + ir = (0, 0, d, d) # the pixmap rectangle + + pm = fitz.Pixmap(fitz.csRGB, ir, False) + pm.setRect(pm.irect, (255,255,0)) # fill it with some background color + + color = (0, 0, 255) # color to fill the punch holes + + # alternatively, define a 'fill' pixmap for the punch holes + # this could be anything, e.g. some photo image ... + fill = fitz.Pixmap(fitz.csRGB, ir, False) # same size as 'pm' + fill.setRect(fill.irect, (0, 255, 255)) # put some color in + + def punch(x, y, step): + """Recursively "punch a hole" in the central square of a pixmap. + + Arguments are top-left coords and the step width. + + Some alternative punching methods are commented out. + """ + s = step // 3 # the new step + # iterate through the 9 sub-squares + # the central one will be filled with the color + for i in range(3): + for j in range(3): + if i != j or i != 1: # this is not the central cube + if s >= 3: # recursing needed? + punch(x+i*s, y+j*s, s) # recurse + else: # punching alternatives are: + pm.setRect((x+s, y+s, x+2*s, y+2*s), color) # fill with a color + #pm.copyPixmap(fill, (x+s, y+s, x+2*s, y+2*s)) # copy from fill + #pm.invertIRect((x+s, y+s, x+2*s, y+2*s)) # invert colors + + return + + #============================================================================== + # main program + #============================================================================== + # now start punching holes into the pixmap + punch(0, 0, d) + t1 = time.perf_counter() + pm.writeImage("sierpinski-punch.png") + t2 = time.perf_counter() + print ("%g sec to create / fill the pixmap" % round(t1-t0,3)) + print ("%g sec to save the image" % round(t2-t1,3)) + +The result should look something like this: + +.. image:: images/img-sierpinski.png + :scale: 33 + +---------- + +How to Interface with NumPy +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This shows how to create a PNG file from a numpy array (several times faster than most other methods):: + + import numpy as np + import fitz + #============================================================================== + # create a fun-colored width * height PNG with fitz and numpy + #============================================================================== + height = 150 + width = 100 + bild = np.ndarray((height, width, 3), dtype=np.uint8) + + for i in range(height): + for j in range(width): + # one pixel (some fun coloring) + bild[i, j] = [(i+j)%256, i%256, j%256] + + samples = bytearray(bild.tostring()) # get plain pixel data from numpy array + pix = fitz.Pixmap(fitz.csRGB, width, height, samples, alpha=False) + pix.writePNG("test.png") + + +---------- + +How to Add Images to a PDF Page +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +There are two methods to add images to a PDF page: :meth:`Page.insertImage` and :meth:`Page.showPDFpage`. Both methods have things in common, but there also exist differences. + +============================== ===================================== ========================================= +**Criterion** :meth:`Page.insertImage` :meth:`Page.showPDFpage` +============================== ===================================== ========================================= +displayable content image file, image in memory, pixmap PDF page +display resolution image resolution vectorized (except raster page content) +rotation multiple of 90 degrees any angle +clipping no (full image only) yes +keep aspect ratio yes (default option) yes (default option) +transparency (water marking) depends on image yes +location / placement scaled to fit target rectangle scaled to fit target rectangle +performance automatic prevention of duplicates; automatic prevention of duplicates; + MD5 calculation on every execution faster than :meth:`Page.insertImage` +multi-page image support no yes +ease of use simple, intuitive; simple, intuitive; + performance considerations apply **usable for all document types** + for multiple insertions of same image (including images!) after conversion to + PDF via :meth:`Document.convertToPDF` +============================== ===================================== ========================================= + +Basic code pattern for :meth:`Page.insertImage`. **Exactly one** of the parameters **filename / stream / pixmap** must be given:: + + page.insertImage( + rect, # where to place the image (rect-like) + filename=None, # image in a file + stream=None, # image in memory (bytes) + pixmap=None, # image from pixmap + rotate=0, # rotate (int, multiple of 90) + keep_proportion=True, # keep aspect ratio + overlay=True, # put in foreground + ) + +Basic code pattern for :meth:`Page.showPDFpage`. Source and target PDF must be different :ref:`Document` objects (but may be opened from the same file):: + + page.showPDFpage( + rect, # where to place the image (rect-like) + src, # source PDF + pno=0, # page number in source PDF + clip=None, # only display this area (rect-like) + rotate=0, # rotate (float, any value) + keep_proportion=True, # keep aspect ratio + overlay=True, # put in foreground + ) + +Text +----- + +---------- + +How to Extract all Document Text +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This script will take a document filename and generate a text file from all of its text. + +The document can be any supported type like PDF, XPS, etc. + +The script works as a command line tool which expects the document filename supplied as a parameter. It generates one text file named "filename.txt" in the script directory. Text of pages is separated by a line "-----":: + + import sys, fitz + fname = sys.argv[1] # get document filename + doc = fitz.open(fname) # open document + out = open(fname + ".txt", "wb") # open text output + for page in doc: # iterate the document pages + text = page.getText().encode("utf8") # get plain text (is in UTF-8) + out.write(text) # write text of page + out.write(bytes((12,))) # write page delimiter (form feed 0x0C) + out.close() + +The output will be plain text as it is coded in the document. No effort is made to prettify in any way. Specifally for PDF, this may mean output not in usual reading order, unexpected line breaks and so forth. + +You have many options to cure this -- see chapter :ref:`Appendix2`. Among them are: + +1. Extract text in HTML format and store it as a HTML document, so it can be viewed in any browser. +2. Extract text as a list of text blocks via *Page.getText("blocks")*. Each item of this list contains position information for its text, which can be used to establish a convenient reading order. +3. Extract a list of single words via *Page.getText("words")*. Its items are words with position information. Use it to determine text contained in a given rectangle -- see next section. + +See the following two section for examples and further explanations. + + +.. index:: + triple: extract;text;rectangle + +How to Extract Text from within a Rectangle +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Please refer to the script `textboxtract.py `_. + +It demonstrates ways to extract text contained in the following red rectangle, + +.. image:: images/img-textboxtract.png + :scale: 75 + +.. highlight:: text + +by using more or less restrictive conditions to find the relevant words:: + + Select the words strictly contained in rectangle + ------------------------------------------------ + Die Altersübereinstimmung deutete darauf hin, + engen, nur 50 Millionen Jahre großen + Gesteinshagel auf den Mond traf und dabei + hinterließ – einige größer als Frankreich. + es sich um eine letzte, infernalische Welle + Geburt des Sonnensystems. Daher tauften die + das Ereignis »lunare Katastrophe«. Später + die Bezeichnung Großes Bombardement durch. + +Or, more forgiving, respectively:: + + Select the words intersecting the rectangle + ------------------------------------------- + Die Altersübereinstimmung deutete darauf hin, dass + einem engen, nur 50 Millionen Jahre großen Zeitfenster + ein Gesteinshagel auf den Mond traf und dabei unzählige + Krater hinterließ – einige größer als Frankreich. Offenbar + handelte es sich um eine letzte, infernalische Welle nach + der Geburt des Sonnensystems. Daher tauften die Caltech- + Forscher das Ereignis »lunare Katastrophe«. Später setzte + sich die Bezeichnung Großes Bombardement durch. + +The latter output also includes words *intersecting* the rectangle. + +.. highlight:: python + +What if your **rectangle spans across more than one page**? Follow this recipe: + +* Create a common list of all words of all pages which your rectangle intersects. +* When adding word items to this common list, increase their **y-coordinates** by the accumulated height of all previous pages. + + +---------- + +.. index:: + pair: text;reading order + +How to Extract Text in Natural Reading Order +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +One of the common issues with PDF text extraction is, that text may not appear in any particular reading order. + +Responsible for this effect is the PDF creator (software or a human). For example, page headers may have been inserted in a separate step -- after the document had been produced. In such a case, the header text will appear at the end of a page text extraction (allthough it will be correctly shown by PDF viewer software). For example, the following snippet will add some header and footer lines to an existing PDF:: + + doc = fitz.open("some.pdf") + header = "Header" # text in header + footer = "Page %i of %i" # text in footer + for page in doc: + page.insertText((50, 50), header) # insert header + page.insertText( # insert footer 50 points above page bottom + (50, page.rect.height - 50), + footer % (page.number + 1, len(doc)), + ) + +The text sequence extracted from a page modified in this way will look like this: + +1. original text +2. header line +3. footer line + +PyMuPDF has several means to re-establish some reading sequence or even to re-generate a layout close to the original. + +As a starting point take the above mentioned `script `_ and then use the full page rectangle. + +On rare occasions, when the PDF creator has been "over-creative", extracted text does not even keep the correct reading sequence of **single letters**: instead of the two words "DELUXE PROPERTY" you might sometimes get an anagram, consisting of 8 words like "DEL", "XE" , "P", "OP", "RTY", "U", "R" and "E". + +Such a PDF is also not searchable by all PDF viewers, but it is displayed correctly and looks harmless. + +In those cases, the following function will help composing the original words of the page. The resulting list is also searchable and can be used to deliver rectangles for the found text locations:: + + from operator import itemgetter + from itertools import groupby + import fitz + + def recover(words, rect): + """ Word recovery. + + Notes: + Method 'getTextWords()' does not try to recover words, if their single + letters do not appear in correct lexical order. This function steps in + here and creates a new list of recovered words. + Args: + words: list of words as created by 'getTextWords()' + rect: rectangle to consider (usually the full page) + Returns: + List of recovered words. Same format as 'getTextWords', but left out + block, line and word number - a list of items of the following format: + [x0, y0, x1, y1, "word"] + """ + # build my sublist of words contained in given rectangle + mywords = [w for w in words if fitz.Rect(w[:4]) in rect] + + # sort the words by lower line, then by word start coordinate + mywords.sort(key=itemgetter(3, 0)) # sort by y1, x0 of word rectangle + + # build word groups on same line + grouped_lines = groupby(mywords, key=itemgetter(3)) + + words_out = [] # we will return this + + # iterate through the grouped lines + # for each line coordinate ("_"), the list of words is given + for _, words_in_line in grouped_lines: + for i, w in enumerate(words_in_line): + if i == 0: # store first word + x0, y0, x1, y1, word = w[:5] + continue + + r = fitz.Rect(w[:4]) # word rect + + # Compute word distance threshold as 20% of width of 1 letter. + # So we should be safe joining text pieces into one word if they + # have a distance shorter than that. + threshold = r.width / len(w[4]) / 5 + if r.x0 <= x1 + threshold: # join with previous word + word += w[4] # add string + x1 = r.x1 # new end-of-word coordinate + y0 = max(y0, r.y0) # extend word rect upper bound + continue + + # now have a new word, output previous one + words_out.append([x0, y0, x1, y1, word]) + + # store the new word + x0, y0, x1, y1, word = w[:5] + + # output word waiting for completion + words_out.append([x0, y0, x1, y1, word]) + + return words_out + + def search_for(text, words): + """ Search for text in items of list of words + + Notes: + Can be adjusted / extended in obvious ways, e.g. using regular + expressions, or being case insensitive, or only looking for complete + words, etc. + Args: + text: string to be searched for + words: list of items in format delivered by 'getTextWords()'. + Returns: + List of rectangles, one for each found locations. + """ + rect_list = [] + for w in words: + if text in w[4]: + rect_list.append(fitz.Rect(w[:4])) + + return rect_list + + +---------- + +How to :index:`Extract Tables ` from Documents +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you see a table in a document, you are not normally looking at something like an embedded Excel or other identifyable object. It usually is just text, formatted to appear as appropriate. + +Extracting a tabular data from such a page area therefore means that you must find a way to **(1)** graphically indicate table and column borders, and **(2)** then extract text based on this information. + +The wxPython GUI script `wxTableExtract.py `_ strives to exactly do that. You may want to have a look at it and adjust it to your liking. + +---------- + +How to Search for and Mark Text +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +There is a standard search function to search for arbitrary text on a page: :meth:`Page.searchFor`. It returns a list of :ref:`Rect` objects which surround a found occurrence. These rectangles can for example be used to automatically insert annotations which visibly mark the found text. + +This method has advantages and drawbacks. Pros are + +* the search string can contain blanks and wrap across lines +* upper or lower cases are treated equal +* return may also be a list of :ref:`Quad` objects to precisely locate text that is **not parallel** to either axis. + +Disadvantages: + +* you cannot determine the number of found items beforehand: if *hit_max* items are returned you do not know whether you have missed any. + +But you have other options:: + + import sys + import fitz + + def mark_word(page, text): + """Underline each word that contains 'text'. + """ + found = 0 + wlist = page.getTextWords() # make the word list + for w in wlist: # scan through all words on page + if text in w[4]: # w[4] is the word's string + found += 1 # count + r = fitz.Rect(w[:4]) # make rect from word bbox + page.addUnderlineAnnot(r) # underline + return found + + fname = sys.argv[1] # filename + text = sys.argv[2] # search string + doc = fitz.open(fname) + + print("underlining words containing '%s' in document '%s'" % (word, doc.name)) + + new_doc = False # indicator if anything found at all + + for page in doc: # scan through the pages + found = mark_word(page, text) # mark the page's words + if found: # if anything found ... + new_doc = True + print("found '%s' %i times on page %i" % (text, found, page.number + 1)) + + if new_doc: + doc.save("marked-" + doc.name) + +This script uses :meth:`Page.getTextWords` to look for a string, handed in via cli parameter. This method separates a page's text into "words" using spaces and line breaks as delimiters. Therefore the words in this lists contain no spaces or line breaks. Further remarks: + +* If found, the **complete word containing the string** is marked (underlined) -- not only the search string. +* The search string may **not contain spaces** or other white space. +* As shown here, upper / lower cases are **respected**. But this can be changed by using the string method *lower()* (or even regular expressions) in function *mark_word*. +* There is **no upper limit**: all occurrences will be detected. +* You can use **anything** to mark the word: 'Underline', 'Highlight', 'StrikeThrough' or 'Square' annotations, etc. +* Here is an example snippet of a page of this manual, where "MuPDF" has been used as the search string. Note that all strings **containing "MuPDF"** have been completely underlined (not just the search string). + +.. image:: images/img-markedpdf.jpg + :scale: 60 + +---------------------------------------------- + +How to Analyze Font Characteristics +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +To analyze the characteristics of text in a PDF use this elementary script as a starting point: + +.. literalinclude:: text-lister.py + :language: python + +Here is the PDF page and the script output: + +.. image:: images/img-pdftext.jpg + :scale: 80 + +----------------------------------------- + +How to Insert Text +~~~~~~~~~~~~~~~~~~~~ +PyMuPDF provides ways to insert text on new or existing PDF pages with the following features: + +* choose the font, including built-in fonts and fonts that are available as files +* choose text characteristics like bold, italic, font size, font color, etc. +* position the text in multiple ways: + + - either as simple line-oriented output starting at a certain point, + - or fitting text in a box provided as a rectangle, in which case text alignment choices are also available, + - choose whether text should be put in foreground (overlay existing content), + - all text can be arbitrarily "morphed", i.e. its appearance can be changed via a :ref:`Matrix`, to achieve effects like scaling, shearing or mirroring, + - independently from morphing and in addition to that, text can be rotated by integer multiples of 90 degrees. + +All of the above is provided by three basic :ref:`Page`, resp. :ref:`Shape` methods: + +* :meth:`Page.insertFont` -- install a font for the page for later reference. The result is reflected in the output of :meth:`Document.getPageFontList`. The font can be: + + - provided as a file, + - already present somewhere in **this or another** PDF, or + - be a **built-in** font. + +* :meth:`Page.insertText` -- write some lines of text. Internally, this uses :meth:`Shape.insertText`. + +* :meth:`Page.insertTextbox` -- fit text in a given rectangle. Here you can choose text alignment features (left, right, centered, justified) and you keep control as to whether text actually fits. Internally, this uses :meth:`Shape.insertTextbox`. + +.. note:: Both text insertion methods automatically install the font as necessary. + +How to Write Text Lines +^^^^^^^^^^^^^^^^^^^^^^^^^^ +Output some text lines on a page:: + + import fitz + doc = fitz.open(...) # new or existing PDF + page = doc.newPage() # new or existing page via doc[n] + p = fitz.Point(50, 72) # start point of 1st line + + text = "Some text,\nspread across\nseveral lines." + # the same result is achievable by + # text = ["Some text", "spread across", "several lines."] + + rc = page.insertText(p, # bottom-left of 1st char + text, # the text (honors '\n') + fontname = "helv", # the default font + fontsize = 11, # the default font size + rotate = 0, # also available: 90, 180, 270 + ) + print("%i lines printed on page %i." % (rc, page.number)) + + doc.save("text.pdf") + +With this method, only the **number of lines** will be controlled to not go beyond page height. Surplus lines will not be written and the number of actual lines will be returned. The calculation uses *1.2 * fontsize* as the line height and 36 points (0.5 inches) as bottom margin. + +Line **width is ignored**. The surplus part of a line will simply be invisible. + +However, for built-in fonts there are ways to calculate the line width beforehand - see :meth:`getTextlength`. + +Here is another example. It inserts 4 text strings using the four different rotation options, and thereby explains, how the text insertion point must be chosen to achieve the desired result:: + + import fitz + doc = fitz.open() + page = doc.newPage() + # the text strings, each having 3 lines + text1 = "rotate=0\nLine 2\nLine 3" + text2 = "rotate=90\nLine 2\nLine 3" + text3 = "rotate=-90\nLine 2\nLine 3" + text4 = "rotate=180\nLine 2\nLine 3" + red = (1, 0, 0) # the color for the red dots + # the insertion points, each with a 25 pix distance from the corners + p1 = fitz.Point(25, 25) + p2 = fitz.Point(page.rect.width - 25, 25) + p3 = fitz.Point(25, page.rect.height - 25) + p4 = fitz.Point(page.rect.width - 25, page.rect.height - 25) + # create a Shape to draw on + shape = page.newShape() + + # draw the insertion points as red, filled dots + shape.drawCircle(p1,1) + shape.drawCircle(p2,1) + shape.drawCircle(p3,1) + shape.drawCircle(p4,1) + shape.finish(width=0.3, color=red, fill=red) + + # insert the text strings + shape.insertText(p1, text1) + shape.insertText(p3, text2, rotate=90) + shape.insertText(p2, text3, rotate=-90) + shape.insertText(p4, text4, rotate=180) + + # store our work to the page + shape.commit() + doc.save(...) + +This is the result: + +.. image:: images/img-inserttext.jpg + :scale: 33 + + + +------------------------------------------ + +How to Fill a Text Box +^^^^^^^^^^^^^^^^^^^^^^^^^^ +This script fills 4 different rectangles with text, each time choosing a different rotation value:: + + import fitz + doc = fitz.open(...) # new or existing PDF + page = doc.newPage() # new page, or choose doc[n] + r1 = fitz.Rect(50,100,100,150) # a 50x50 rectangle + disp = fitz.Rect(55, 0, 55, 0) # add this to get more rects + r2 = r1 + disp # 2nd rect + r3 = r1 + disp * 2 # 3rd rect + r4 = r1 + disp * 3 # 4th rect + t1 = "text with rotate = 0." # the texts we will put in + t2 = "text with rotate = 90." + t3 = "text with rotate = -90." + t4 = "text with rotate = 180." + red = (1,0,0) # some colors + gold = (1,1,0) + blue = (0,0,1) + """We use a Shape object (something like a canvas) to output the text and + the rectangles surounding it for demonstration. + """ + shape = page.newShape() # create Shape + shape.drawRect(r1) # draw rectangles + shape.drawRect(r2) # giving them + shape.drawRect(r3) # a yellow background + shape.drawRect(r4) # and a red border + shape.finish(width = 0.3, color = red, fill = gold) + # Now insert text in the rectangles. Font "Helvetica" will be used + # by default. A return code rc < 0 indicates insufficient space (not checked here). + rc = shape.insertTextbox(r1, t1, color = blue) + rc = shape.insertTextbox(r2, t2, color = blue, rotate = 90) + rc = shape.insertTextbox(r3, t3, color = blue, rotate = -90) + rc = shape.insertTextbox(r4, t4, color = blue, rotate = 180) + shape.commit() # write all stuff to page /Contents + doc.save("...") + +Several default values were used above: font "Helvetica", font size 11 and text alignment "left". The result will look like this: + +.. image:: images/img-textbox.jpg + :scale: 50 + +------------------------------------------ + +How to Use Non-Standard Encoding +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Since v1.14, MuPDF allows Greek and Russian encoding variants for the :data:`Base14_Fonts`. In PyMuPDF this is supported via an additional *encoding* argument. Effectively, this is relevant for Helvetica, Times-Roman and Courier (and their bold / italic forms) and characters outside the ASCII code range only. Elsewhere, the argument is ignored. Here is how to request Russian encoding with the standard font Helvetica:: + + page.insertText(point, russian_text, encoding=fitz.TEXT_ENCODING_CYRILLIC) + +The valid encoding values are TEXT_ENCODING_LATIN (0), TEXT_ENCODING_GREEK (1), and TEXT_ENCODING_CYRILLIC (2, Russian) with Latin being the default. Encoding can be specified by all relevant font and text insertion methods. + +By the above statement, the fontname *helv* is automatically connected to the Russian font variant of Helvetica. Any subsequent text insertion with **this fontname** will use the Russian Helvetica encoding. + +If you change the fontname just slightly, you can also achieve an **encoding "mixture"** for the **same base font** on the same page:: + + import fitz + doc=fitz.open() + page = doc.newPage() + shape = page.newShape() + t="Sômé tèxt wìth nöñ-Lâtîn characterß." + shape.insertText((50,70), t, fontname="helv", encoding=fitz.TEXT_ENCODING_LATIN) + shape.insertText((50,90), t, fontname="HElv", encoding=fitz.TEXT_ENCODING_GREEK) + shape.insertText((50,110), t, fontname="HELV", encoding=fitz.TEXT_ENCODING_CYRILLIC) + shape.commit() + doc.save("t.pdf") + +The result: + +.. image:: images/img-encoding.jpg + :scale: 50 + +The snippet above indeed leads to three different copies of the Helvetica font in the PDF. Each copy is uniquely idetified (and referenceable) by using the correct upper-lower case spelling of the reserved word "helv":: + + for f in doc.getPageFontList(0): print(f) + + [6, 'n/a', 'Type1', 'Helvetica', 'helv', 'WinAnsiEncoding'] + [7, 'n/a', 'Type1', 'Helvetica', 'HElv', 'WinAnsiEncoding'] + [8, 'n/a', 'Type1', 'Helvetica', 'HELV', 'WinAnsiEncoding'] + +----------------------- + +Annotations +----------- +In v1.14.0, annotation handling has been considerably extended: + +* New annotation type support for 'Ink', 'Rubber Stamp' and 'Squiggly' annotations. Ink annots simulate handwritings by combining one or more lists of interconnected points. Stamps are intended to visuably inform about a document's status or intended usage (like "draft", "confidential", etc.). 'Squiggly' is a text marker annot, which underlines selected text with a zigzagged line. + +* Extended 'FreeText' support: + 1. all characters from the *Latin* character set are now available, + 2. colors of text, rectangle background and rectangle border can be independently set + 3. text in rectangle can be rotated by either +90 or -90 degrees + 4. text is automatically wrapped (made multi-line) in available rectangle + 5. all Base-14 fonts are now available (*normal* variants only, i.e. no bold, no italic). +* MuPDF now supports line end icons for 'Line' annots (only). PyMuPDF supported that in v1.13.x already -- and for (almost) the full range of applicable types. So we adjusted the appearance of 'Polygon' and 'PolyLine' annots to closely resemble the one of MuPDF for 'Line'. +* MuPDF now provides its own annotation icons where relevant. PyMuPDF switched to using them (for 'FileAttachment' and 'Text' ["sticky note"] so far). +* MuPDF now also supports 'Caret', 'Movie', 'Sound' and 'Signature' annotations, which we may include in PyMuPDF at some later time. + +How to Add and Modify Annotations +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In PyMuPDF, new annotations can be added added via :ref:`Page` methods. Once an annotation exists, it can be modified to a large extent using methods of the :ref:`Annot` class. + +In contrast to many other tools, initial insert of annotations happens with a minimum number of properties. We leave it to the programmer to e.g. set attributes like author, creation date or subject. + +As an overview for these capabilities, look at the following script that fills a PDF page with most of the available annotations. Look in the next sections for more special situations: + +.. literalinclude:: new-annots.py + :language: python + + +This script should lead to the following output: + +.. image:: images/img-annots.jpg + :scale: 80 + +------------------------------ + +How to Mark Text +~~~~~~~~~~~~~~~~~~~~~ +This script searches for text and marks it:: + + # -*- coding: utf-8 -*- + import fitz + + # the document to annotate + doc = fitz.open("tilted-text.pdf") + + # the text to be marked + t = "¡La práctica hace el campeón!" + + # work with first page only + page = doc[0] + + # get list of text locations + # we use "quads", not rectangles because text may be tilted! + rl = page.searchFor(t, quads = True) + + # mark all found quads with one annotation + page.addSquigglyAnnot(rl) + + # save to a new PDF + doc.save("a-squiggly.pdf") + +The result looks like this: + +.. image:: images/img-textmarker.jpg + :scale: 80 + +------------------------------ + +How to Use FreeText +~~~~~~~~~~~~~~~~~~~~~ +This script shows a couple of ways to deal with 'FreeText' annotations:: + + # -*- coding: utf-8 -*- + import fitz + + # some colors + blue = (0,0,1) + green = (0,1,0) + red = (1,0,0) + gold = (1,1,0) + + # a new PDF with 1 page + doc = fitz.open() + page = doc.newPage() + + # 3 rectangles, same size, abvove each other + r1 = fitz.Rect(100,100,200,150) + r2 = r1 + (0,75,0,75) + r3 = r2 + (0,75,0,75) + + # the text, Latin alphabet + t = "¡Un pequeño texto para practicar!" + + # add 3 annots, modify the last one somewhat + a1 = page.addFreetextAnnot(r1, t, color=red) + a2 = page.addFreetextAnnot(r2, t, fontname="Ti", color=blue) + a3 = page.addFreetextAnnot(r3, t, fontname="Co", color=blue, rotate=90) + a3.setBorder(width=0) + a3.update(fontsize=8, fill_color=gold) + + # save the PDF + doc.save("a-freetext.pdf") + +The result looks like this: + +.. image:: images/img-freetext.jpg + :scale: 80 + +------------------------------ + +Using Buttons and JavaScript +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Since MuPDF v1.16, 'FreeText' annotations no longer support bold or italic versions of the Times-Roman, Helvetica or Courier fonts. + +A big **thank you** to our user `@kurokawaikki `_, who contributed the following script to **circumvent this restriction**. + +.. literalinclude:: make-bold.py + :language: python + +-------------------------- + +How to Use Ink Annotations +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Ink annotations are used to contain freehand scribblings. A typical example maybe an image of your signature consisting of first name and last name. Technically an ink annotation is implemented as a **list of lists of points**. Each point list is regarded as a continuous line connecting the points. Different point lists represent indepndent line segments of the annotation. + +The following script creates an ink annotation with two mathematical curves (sine and cosine function graphs) as line segments:: + + import math + import fitz + + #------------------------------------------------------------------------------ + # preliminary stuff: create function value lists for sine and cosine + #------------------------------------------------------------------------------ + w360 = math.pi * 2 # go through full circle + deg = w360 / 360 # 1 degree as radiants + rect = fitz.Rect(100,200, 300, 300) # use this rectangle + first_x = rect.x0 # x starts from left + first_y = rect.y0 + rect.height / 2. # rect middle means y = 0 + x_step = rect.width / 360 # rect width means 360 degrees + y_scale = rect.height / 2. # rect height means 2 + sin_points = [] # sine values go here + cos_points = [] # cosine values go here + for x in range(362): # now fill in the values + x_coord = x * x_step + first_x # current x coordinate + y = -math.sin(x * deg) # sine + p = (x_coord, y * y_scale + first_y) # corresponding point + sin_points.append(p) # append + y = -math.cos(x * deg) # cosine + p = (x_coord, y * y_scale + first_y) # corresponding point + cos_points.append(p) # append + + #------------------------------------------------------------------------------ + # create the document with one page + #------------------------------------------------------------------------------ + doc = fitz.open() # make new PDF + page = doc.newPage() # give it a page + + #------------------------------------------------------------------------------ + # add the Ink annotation, consisting of 2 curve segments + #------------------------------------------------------------------------------ + annot = page.addInkAnnot((sin_points, cos_points)) + # let it look a little nicer + annot.setBorder(width=0.3, dashes=[1,]) # line thickness, some dashing + annot.setColors(stroke=(0,0,1)) # make the lines blue + annot.update() # update the appearance + + page.drawRect(rect, width=0.3) # only to demonstrate we did OK + + doc.save("a-inktest.pdf") + +This is the result: + +.. image:: images/img-inkannot.jpg + :scale: 50 + +------------------------------ + +Drawing and Graphics +--------------------- + +PDF files support elementary drawing operations as part of their syntax. This includes basic geometrical objects like lines, curves, circles, rectangles including specifying colors. + +The syntax for such operations is defined in "A Operator Summary" on page 985 of the :ref:`AdobeManual`. Specifying these operators for a PDF page happens in its :data:`contents` objects. + +PyMuPDF implements a large part of the available features via its :ref:`Shape` class, which is comparable to notions like "canvas" in other packages (e.g. `reportlab `_). + +A shape is always created as a **child of a page**, usually with an instruction like *shape = page.newShape()*. The class defines numerous methods that perform drawing operations on the page's area. For example, *last_point = shape.drawRect(rect)* draws a rectangle along the borders of a suitably defined *rect = fitz.Rect(...)*. + +The returned *last_point* **always** is the :ref:`Point` where drawing operation ended ("last point"). Every such elementary drawing requires a subsequent :meth:`Shape.finish` to "close" it, but there may be multiple drawings which have one common *finish()* method. + +In fact, :meth:`Shape.finish` *defines* a group of preceding draw operations to form one -- potentially rather complex -- graphics object. PyMuPDF provides several predefined graphics in `shapes_and_symbols.py `_ which demonstrate how this works. + +If you import this script, you can also directly use its graphics as in the following exmple:: + + # -*- coding: utf-8 -*- + """ + Created on Sun Dec 9 08:34:06 2018 + + @author: Jorj + @license: GNU GPL 3.0+ + + Create a list of available symbols defined in shapes_and_symbols.py + + This also demonstrates an example usage: how these symbols could be used + as bullet-point symbols in some text. + + """ + + import fitz + import shapes_and_symbols as sas + + # list of available symbol functions and their descriptions + tlist = [ + (sas.arrow, "arrow (easy)"), + (sas.caro, "caro (easy)"), + (sas.clover, "clover (easy)"), + (sas.diamond, "diamond (easy)"), + (sas.dontenter, "do not enter (medium)"), + (sas.frowney, "frowney (medium)"), + (sas.hand, "hand (complex)"), + (sas.heart, "heart (easy)"), + (sas.pencil, "pencil (very complex)"), + (sas.smiley, "smiley (easy)"), + ] + + r = fitz.Rect(50, 50, 100, 100) # first rect to contain a symbol + d = fitz.Rect(0, r.height + 10, 0, r.height + 10) # displacement to next ret + p = (15, -r.height * 0.2) # starting point of explanation text + rlist = [r] # rectangle list + + for i in range(1, len(tlist)): # fill in all the rectangles + rlist.append(rlist[i-1] + d) + + doc = fitz.open() # create empty PDF + page = doc.newPage() # create an empty page + shape = page.newShape() # start a Shape (canvas) + + for i, r in enumerate(rlist): + tlist[i][0](shape, rlist[i]) # execute symbol creation + shape.insertText(rlist[i].br + p, # insert description text + tlist[i][1], fontsize=r.height/1.2) + + # store everything to the page's /Contents object + shape.commit() + + import os + scriptdir = os.path.dirname(__file__) + doc.save(os.path.join(scriptdir, "symbol-list.pdf")) # save the PDF + + +This is the script's outcome: + +.. image:: images/img-symbols.jpg + :scale: 50 + +------------------------------ + +Multiprocessing +---------------- +MuPDF has no integrated support for threading - they call themselves "threading-agnostic". While there do exist tricky possibilities to still use threading with MuPDF, the baseline consequence for **PyMuPDF** is: + +**No Python threading support**. + +Using PyMuPDF in a Python threading environment will lead to blocking effects for the main thread. + +However, there exists the option to use Python's *multiprocessing* module in a variety of ways. + +If you are looking to speed up page-oriented processing for a large document, use this script as a starting point. It should be at least twice as fast as the corresponding sequential processing. + +.. literalinclude:: multiprocess-render.py + :language: python + +Here is a more complex example involving inter-process communication between a main process (showing a GUI) and a child process doing PyMuPDF access to a document. + +.. literalinclude:: multiprocess-gui.py + :language: python + +------------------------------ + +General +-------- + +How to Open with :index:`a Wrong File Extension ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you have a document with a wrong file extension for its type, you can still correctly open it. + +Assume that "some.file" is actually an XPS. Open it like so: + +>>> doc = fitz.open("some.file", filetype = "xps") + +.. note:: MuPDF itself does not try to determine the file type from the file contents. **You** are responsible for supplying the filetype info in some way -- either implicitely via the file extension, or explicitely as shown. There are pure Python packages like `filetype `_ that help you doing this. Also consult the :ref:`Document` chapter for a full description. + +---------- + +How to :index:`Embed or Attach Files ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PDF supports incorporating arbitrary data. This can be done in one of two ways: "embedding" or "attaching". PyMuPDF supports both options. + +1. Attached Files: data are **attached to a page** by way of a *FileAttachment* annotation with this statement: *annot = page.addFileAnnot(pos, ...)*, for details see :meth:`Page.addFileAnnot`. The first parameter "pos" is the :ref:`Point`, where a "PushPin" icon should be placed on the page. + +2. Embedded Files: data are embedded on the **document level** via method :meth:`Document.embeddedFileAdd`. + +The basic differences between these options are **(1)** you need edit permission to embed a file, but only annotation permission to attach, **(2)** like all annotations, attachments are visible on a page, embedded files are not. + +There exist several example scripts: `embedded-list.py `_, `new-annots.py `_. + +Also look at the sections above and at chapter :ref:`Appendix 3`. + +---------- + +.. index:: + pair: delete;pages + pair: rearrange;pages + +How to Delete and Re-Arrange Pages +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +With PyMuPDF you have all options to copy, move, delete or re-arrange the pages of a PDF. Intuitive methods exist that allow you to do this on a page-by-page level, like the :meth:`Document.copyPage` method. + +Or you alternatively prepare a complete new page layout in form of a Python sequence, that contains the page numbers you want, in the sequence you want, and as many times as you want each page. The following may illustrate what can be done with :meth:`Document.select`: + +*doc.select([1, 1, 1, 5, 4, 9, 9, 9, 0, 2, 2, 2])* + +Now let's prepare a PDF for double-sided printing (on a printer not directly supporting this): + +The number of pages is given by *len(doc)* (equal to *doc.pageCount*). The following lists represent the even and the odd page numbers, respectively: + +>>> p_even = [p in range(len(doc)) if p % 2 == 0] +>>> p_odd = [p in range(len(doc)) if p % 2 == 1] + +This snippet creates the respective sub documents which can then be used to print the document: + +>>> doc.select(p_even) # only the even pages left over +>>> doc.save("even.pdf") # save the "even" PDF +>>> doc.close() # recycle the file +>>> doc = fitz.open(doc.name) # re-open +>>> doc.select(p_odd) # and do the same with the odd pages +>>> doc.save("odd.pdf") + +For more information also have a look at this Wiki `article `_. + + +The following example will reverse the order of all pages (**extremely fast:** sub-second time for the 1310 pages of the :ref:`AdobeManual`): + +>>> lastPage = len(doc) - 1 +>>> for i in range(lastPage): + doc.movePage(lastPage, i) # move current last page to the front + +This snippet duplicates the PDF with itself so that it will contain the pages *0, 1, ..., n, 0, 1, ..., n* **(extremely fast and without noticeably increasing the file size!)**: + +>>> pageCount = len(doc) +>>> for i in range(pageCount): + doc.copyPage(i) # copy this page to after last page + +---------- + +How to Join PDFs +~~~~~~~~~~~~~~~~~~ +It is easy to join PDFs with method :meth:`Document.insertPDF`. Given open PDF documents, you can copy page ranges from one to the other. You can select the point where the copied pages should be placed, you can revert the page sequence and also change page rotation. This Wiki `article `_ contains a full description. + +The GUI script `PDFjoiner.py `_ uses this method to join a list of files while also joining the respective table of contents segments. It looks like this: + +.. image:: images/img-pdfjoiner.jpg + :scale: 60 + +---------- + +How to Add Pages +~~~~~~~~~~~~~~~~~~ +There two methods for adding new pages to a PDF: :meth:`Document.insertPage` and :meth:`Document.newPage` (and they share a common code base). + +**newPage** + +:meth:`Document.newPage` returns the created :ref:`Page` object. Here is the constructor showing defaults:: + + >>> doc = fitz.open(...) # some new or existing PDF document + >>> page = doc.newPage(to = -1, # insertion point: end of document + width = 595, # page dimension: A4 portrait + height = 842) + +The above could also have been achieved with the short form *page = doc.newPage()*. The *to* parameter specifies the document's page number (0-based) **in front of which** to insert. + +To create a page in *landscape* format, just exchange the width and height values. + +Use this to create the page with another pre-defined paper format: + +>>> w, h = fitz.PaperSize("letter-l") # 'Letter' landscape +>>> page = doc.newPage(width = w, height = h) + +The convenience function :meth:`PaperSize` knows over 40 industry standard paper formats to choose from. To see them, inspect dictionary :attr:`paperSizes`. Pass the desired dictionary key to :meth:`PaperSize` to retrieve the paper dimensions. Upper and lower case is supported. If you append "-L" to the format name, the landscape version is returned. + +.. note:: Here is a 3-liner that creates a PDF with one empty page. Its file size is 470 bytes: + + >>> doc = fitz.open() + >>> doc.newPage() + >>> doc.save("A4.pdf") + + +**insertPage** + +:meth:`Document.insertPage` also inserts a new page and accepts the same parameters *to*, *width* and *height*. But it lets you also insert arbitrary text into the new page and returns the number of inserted lines:: + + >>> doc = fitz.open(...) # some new or existing PDF document + >>> n = doc.insertPage(to = -1, # default insertion point + text = None, # string or sequence of strings + fontsize = 11, + width = 595, + height = 842, + fontname = "Helvetica", # default font + fontfile = None, # any font file name + color = (0, 0, 0)) # text color (RGB) + +The text parameter can be a (sequence of) string (assuming UTF-8 encoding). Insertion will start at :ref:`Point` (50, 72), which is one inch below top of page and 50 points from the left. The number of inserted text lines is returned. See the method definiton for more details. + +---------- + +How To Dynamically Clean Up Corrupt PDFs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This shows a potential use of PyMuPDF with another Python PDF library (the excellent pure Python package `pdfrw `_ is used here as an example). + +If a clean, non-corrupt / decompressed PDF is needed, one could dynamically invoke PyMuPDF to recover from many problems like so:: + + import sys + from io import BytesIO + from pdfrw import PdfReader + import fitz + + #--------------------------------------- + # 'Tolerant' PDF reader + #--------------------------------------- + def reader(fname, password = None): + idata = open(fname, "rb").read() # read the PDF into memory and + ibuffer = BytesIO(idata) # convert to stream + if password is None: + try: + return PdfReader(ibuffer) # if this works: fine! + except: + pass + + # either we need a password or it is a problem-PDF + # create a repaired / decompressed / decrypted version + doc = fitz.open("pdf", ibuffer) + if password is not None: # decrypt if password provided + rc = doc.authenticate(password) + if not rc > 0: + raise ValueError("wrong password") + c = doc.write(garbage=3, deflate=True) + del doc # close & delete doc + return PdfReader(BytesIO(c)) # let pdfrw retry + #--------------------------------------- + # Main program + #--------------------------------------- + pdf = reader("pymupdf.pdf", password = None) # inlude a password if necessary + print pdf.Info + # do further processing + +With the command line utility *pdftk* (`available `_ for Windows only, but reported to also run under `Wine `_) a similar result can be achieved, see `here `_. However, you must invoke it as a separate process via *subprocess.Popen*, using stdin and stdout as communication vehicles. + +How to Split Single Pages +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This deals with splitting up pages of a PDF in arbitrary pieces. For example, you may have a PDF with *Letter* format pages which you want to print with a magnification factor of four: each page is split up in 4 pieces which each go to a separate PDF page in *Letter* format again:: + + """ + Create a PDF copy with split-up pages (posterize) + --------------------------------------------------- + License: GNU GPL V3 + (c) 2018 Jorj X. McKie + + Usage + ------ + python posterize.py input.pdf + + Result + ------- + A file "poster-input.pdf" with 4 output pages for every input page. + + Notes + ----- + (1) Output file is chosen to have page dimensions of 1/4 of input. + + (2) Easily adapt the example to make n pages per input, or decide per each + input page or whatever. + + Dependencies + ------------ + PyMuPDF 1.12.2 or later + """ + from __future__ import print_function + import fitz, sys + infile = sys.argv[1] # input file name + src = fitz.open(infile) + doc = fitz.open() # empty output PDF + + for spage in src: # for each page in input + r = spage.rect # input page rectangle + d = fitz.Rect(spage.CropBoxPosition, # CropBox displacement if not + spage.CropBoxPosition) # starting at (0, 0) + #-------------------------------------------------------------------------- + # example: cut input page into 2 x 2 parts + #-------------------------------------------------------------------------- + r1 = r * 0.5 # top left rect + r2 = r1 + (r1.width, 0, r1.width, 0) # top right rect + r3 = r1 + (0, r1.height, 0, r1.height) # bottom left rect + r4 = fitz.Rect(r1.br, r.br) # bottom right rect + rect_list = [r1, r2, r3, r4] # put them in a list + + for rx in rect_list: # run thru rect list + rx += d # add the CropBox displacement + page = doc.newPage(-1, # new output page with rx dimensions + width = rx.width, + height = rx.height) + page.showPDFpage( + page.rect, # fill all new page with the image + src, # input document + spage.number, # input page number + clip = rx, # which part to use of input page + ) + + # that's it, save output file + doc.save("poster-" + src.name, + garbage = 3, # eliminate duplicate objects + deflate = True) # compress stuff where possible + + +This shows what happens to an input page: + +.. image:: images/img-posterize.png + +-------------------------- + +How to Combine Single Pages +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This deals with joining PDF pages to form a new PDF with pages each combining two or four original ones (also called "2-up", "4-up", etc.). This could be used to create booklets or thumbnail-like overviews:: + + ''' + Copy an input PDF to output combining every 4 pages + --------------------------------------------------- + License: GNU GPL V3 + (c) 2018 Jorj X. McKie + + Usage + ------ + python 4up.py input.pdf + + Result + ------- + A file "4up-input.pdf" with 1 output page for every 4 input pages. + + Notes + ----- + (1) Output file is chosen to have A4 portrait pages. Input pages are scaled + maintaining side proportions. Both can be changed, e.g. based on input + page size. However, note that not all pages need to have the same size, etc. + + (2) Easily adapt the example to combine just 2 pages (like for a booklet) or + make the output page dimension dependent on input, or whatever. + + Dependencies + ------------- + PyMuPDF 1.12.1 or later + ''' + from __future__ import print_function + import fitz, sys + infile = sys.argv[1] + src = fitz.open(infile) + doc = fitz.open() # empty output PDF + + width, height = fitz.PaperSize("a4") # A4 portrait output page format + r = fitz.Rect(0, 0, width, height) + + # define the 4 rectangles per page + r1 = r * 0.5 # top left rect + r2 = r1 + (r1.width, 0, r1.width, 0) # top right + r3 = r1 + (0, r1.height, 0, r1.height) # bottom left + r4 = fitz.Rect(r1.br, r.br) # bottom right + + # put them in a list + r_tab = [r1, r2, r3, r4] + + # now copy input pages to output + for spage in src: + if spage.number % 4 == 0: # create new output page + page = doc.newPage(-1, + width = width, + height = height) + # insert input page into the correct rectangle + page.showPDFpage(r_tab[spage.number % 4], # select output rect + src, # input document + spage.number) # input page number + + # by all means, save new file using garbage collection and compression + doc.save("4up-" + infile, garbage = 3, deflate = True) + +Example effect: + +.. image:: images/img-4up.png + + +-------------------------- + +How to Convert Any Document to PDF +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is a script that converts any PyMuPDF supported document to a PDF. These include XPS, EPUB, FB2, CBZ and all image formats, including multi-page TIFF images. + +It features maintaining any metadata, table of contents and links contained in the source document:: + + from __future__ import print_function + """ + Demo script: Convert input file to a PDF + ----------------------------------------- + Intended for multi-page input files like XPS, EPUB etc. + + Features: + --------- + Recovery of table of contents and links of input file. + While this works well for bookmarks (outlines, table of contents), + links will only work if they are not of type "LINK_NAMED". + This link type is skipped by the script. + + For XPS and EPUB input, internal links however **are** of type "LINK_NAMED". + Base library MuPDF does not resolve them to page numbers. + + So, for anyone expert enough to know the internal structure of these + document types, can further interpret and resolve these link types. + + Dependencies + -------------- + PyMuPDF v1.14.0+ + """ + import sys + import fitz + if not (list(map(int, fitz.VersionBind.split("."))) >= [1,14,0]): + raise SystemExit("need PyMuPDF v1.14.0+") + fn = sys.argv[1] + + print("Converting '%s' to '%s.pdf'" % (fn, fn)) + + doc = fitz.open(fn) + + b = doc.convertToPDF() # convert to pdf + pdf = fitz.open("pdf", b) # open as pdf + + toc= doc.getToC() # table of contents of input + pdf.setToC(toc) # simply set it for output + meta = doc.metadata # read and set metadata + if not meta["producer"]: + meta["producer"] = "PyMuPDF v" + fitz.VersionBind + + if not meta["creator"]: + meta["creator"] = "PyMuPDF PDF converter" + meta["modDate"] = fitz.getPDFnow() + meta["creationDate"] = meta["modDate"] + pdf.setMetadata(meta) + + # now process the links + link_cnti = 0 + link_skip = 0 + for pinput in doc: # iterate through input pages + links = pinput.getLinks() # get list of links + link_cnti += len(links) # count how many + pout = pdf[pinput.number] # read corresp. output page + for l in links: # iterate though the links + if l["kind"] == fitz.LINK_NAMED: # we do not handle named links + print("named link page", pinput.number, l) + link_skip += 1 # count them + continue + pout.insertLink(l) # simply output the others + + # save the conversion result + pdf.save(fn + ".pdf", garbage=4, deflate=True) + # say how many named links we skipped + if link_cnti > 0: + print("Skipped %i named links of a total of %i in input." % (link_skip, link_cnti)) + +-------------------------- + +How to Deal with Messages Issued by MuPDF +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Since PyMuPDF v1.16.0, **error messages** issued by the underlying MuPDF library are being redirected to the Python standard device *sys.stderr*. So you can handle them like any other output going to this devices. + +In addition, these messages go to the internal buffer together with any MuPDF warnings -- see below. + +We always prefix these messages with an identifying string *"mupdf:"*. +If you prefer to not see recoverable MuPDF errors at all, issue the command ``fitz.TOOLS.mupdf_display_errors(False)``. + +MuPDF warnings continue to be stored in an internal buffer and can be viewed using :meth:`Tools.mupdf_warnings`. + +Please note that MuPDF errors may or may not lead to Python exceptions. In other words, you may see error messages from which MuPDF can recover and continue processing. + +Example output for a **recoverable error**. We are opening a damaged PDF, but MuPDF is able to repair it and gives us a few information on what happened. Then we illustrate how to find out whether the document can later be saved incrementally. Checking the :attr:`Document.isDirty` attribute at this point also indicates that the open had to repair the document: + +>>> import fitz +>>> doc = fitz.open("damaged-file.pdf") # leads to a sys.stderr message: +mupdf: cannot find startxref +>>> print(fitz.TOOLS.mupdf_warnings()) # check if there is more info: +cannot find startxref +trying to repair broken xref +repairing PDF document +object missing 'endobj' token +>>> doc.can_save_incrementally() # this is to be expected: +False +>>> # the following indicates whether there are updates so far +>>> # this is the case because of the repair actions: +>>> doc.isDirty +True +>>> # the document has nevertheless been created: +>>> doc +fitz.Document('damaged-file.pdf') +>>> # we now know that any save must occur to a new file + +Example output for an **unrecoverable error**: + +>>> import fitz +>>> doc = fitz.open("does-not-exist.pdf") +mupdf: cannot open does-not-exist.pdf: No such file or directory +Traceback (most recent call last): + File "", line 1, in + doc = fitz.open("does-not-exist.pdf") + File "C:\Users\Jorj\AppData\Local\Programs\Python\Python37\lib\site-packages\fitz\fitz.py", line 2200, in __init__ + _fitz.Document_swiginit(self, _fitz.new_Document(filename, stream, filetype, rect, width, height, fontsize)) +RuntimeError: cannot open does-not-exist.pdf: No such file or directory +>>> + +-------------------------- + +How to Deal with PDF Encryption +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Starting with version 1.16.0, PDF decryption and encryption (using passwords) are fully supported. You can do the following: + +* Check whether a document is password protected / (still) encrypted (:attr:`Document.needsPass`, :attr:`Document.isEncrypted`). + +* Gain access authorization to a document (:meth:`Document.authenticate`). + +* Set encryption details for PDF files using :meth:`Document.save` or :meth:`Document.write` and + + - decrypt or encrypt the content + - set password(s) + - set the encryption method + - set permission details + +.. note:: A PDF document may have two different passwords: + + * The **owner password** provides full access rights, including changing passwords, encryption method, or permission detail. + * The **user password** provides access to document content according to the established permission details. If present, opening the PDF in a viewer will require providing it. + + Method :meth:`Document.authenticate` will automatically establish access rights according to the password used. + +The following snippet creates a new PDF and encrypts it with separate user and owner passwords. Permissions are granted to print, copy and annotate, but no changes are allowed to someone authenticating with the user password:: + + import fitz + + text = "some secret information" # keep this data secret + perm = int( + fitz.PDF_PERM_ACCESSIBILITY # always use this + | fitz.PDF_PERM_PRINT # permit printing + | fitz.PDF_PERM_COPY # permit copying + | fitz.PDF_PERM_ANNOTATE # permit annotations + ) + owner_pass = "owner" # owner password + user_pass = "user" # user password + encrypt_meth = fitz.PDF_ENCRYPT_AES_256 # strongest algorithm + doc = fitz.open() # empty pdf + page = doc.newPage() # empty page + page.insertText((50, 72), text) # insert the data + doc.save( + "secret.pdf", + encryption=encrypt_meth, # set the encryption method + owner_pw=owner_pass, # set the owner password + user_pw=user_pass, # set the user password + permissions=perm, # set permissions + ) + +Opening this document with some viewer (Nitro Reader 5) reflects these settings: + +.. image:: images/img-encrypting.jpg + :scale: 50 + +**Decrypting** will automatically happen on save as before when no encryption parameters are provided. + +To **keep the encryption method** of a PDF save it using *encryption=fitz.PDF_ENCRYPT_KEEP*. If *doc.can_save_incrementally() == True*, an incremental save is also possible. + +To **change the encryption method** specify the full range of options above (encryption, owner_pw, user_pw, permissions). An incremental save is **not possible** in this case. + + +-------------------------- + +Common Issues and their Solutions +--------------------------------- + +Changing Annotations: Unexpected Behaviour +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Problem +^^^^^^^^^ +There are two scenarios: + +1. Updating an annotation, which has been created by some other software, via a PyMuPDF script. +2. Creating an annotation with PyMuPDF and later changing it using some other PDF application. + +In both cases you may experience unintended changes like a different annotation icon or text font, the fill color or line dashing have disappeared, line end symbols have changed their size or even have disappeared too, etc. + +Cause +^^^^^^ +Annotation maintenance is handled differently by each PDF maintenance application (if it is supported at all). For any given PDF application, some annotation types may not be supported at all or only partly, or some details may be handled in a different way than with another application. + +Almost always a PDF application also comes with its own icons (file attachments, sticky notes and stamps) and its own set of supported text fonts. For example: + +* (Py-) MuPDF only supports these 5 basic fonts for 'FreeText' annotations: Helvetica, Times-Roman, Courier, ZapfDingbats and Symbol -- no italics / no bold variations. When changing a 'FreeText' annotation created by some other app, its font will probably not be recognized nor accepted and be replaced by Helvetica. + +* PyMuPDF fully supports the PDF text markers, but these types cannot be updated with Adobe Acrobat Reader. + +In most cases there also exists limited support for line dashing which causes existing dashes to be replaced by straight lines. For example: + +* PyMuPDF fully supports all line dashing forms, while other viewers only accept a limited subset. + + +Solutions +^^^^^^^^^^ +Unfortunately there is not much you can do in most of these cases. + +1. Stay with the same software for **creating and changing** an annotation. +2. When using PyMuPDF to change an "alien" annotation, try to **avoid** :meth:`Annot.update`. The following methods **can be used without it** so that the original appearance should be maintained: + + * :meth:`Annot.setRect` (location changes) + * :meth:`Annot.setFlags` (annotation behaviour) + * :meth:`Annot.setInfo` (meta information, except changes to *content*) + * :meth:`Annot.fileUpd` (file attachment changes) + +Misplaced Item Insertions on PDF Pages +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Problem +^^^^^^^^^ + +You inserted an item (like an image, an annotation or some text) on an existing PDF page, but later you find it being placed at a different location than intended. For example an image should be inserted at the top, but it unexpectedly appears near the bottom of the page. + +Cause +^^^^^^ + +The creator of the PDF has established a non-standard page geometry without keeping it "local" (as they should!). Most commonly, the PDF standard point (0,0) at *bottom-left* has been changed to the *top-left* point. So top and bottom are reversed -- causing your insertion to be misplaced. + +The visible image of a PDF page is controlled by commands coded in a special mini-language. For an overview of this language consult "Operator Summary" on pp. 985 of the :ref:`AdobeManual`. These commands are stored in :data:`contents` objects as strings (*bytes* in PyMuPDF). + +There are commands in that language, which change the coordinate system of the page for all the following commands. In order to limit the scope of such commands local, they must be wrapped by the command pair *q* ("save graphics state", or "stack") and *Q* ("restore graphics state", or "unstack"). + +.. highlight:: text + +So the PDF creator did this:: + + stream + 1 0 0 -1 0 792 cm % <=== change of coordinate system: + ... % letter page, top / bottom reversed + ... % remains active beyond these lines + endstream + +where they should have done this:: + + stream + q % put the following in a stack + 1 0 0 -1 0 792 cm % <=== scope of this is limited by Q command + ... % here, a different geometry exists + Q % after this line, geometry of outer scope prevails + endstream + +.. note:: + + * In the mini-language's syntax, spaces and line breaks are equally accepted token delimiters. + * Multiple consecutive delimiters are treated as one. + * Keywords "stream" and "endstream" are inserted automatically -- not by the programmer. + +.. highlight:: python + +Solutions +^^^^^^^^^^ + +Since v1.16.0, there is the property :attr:`Page._isWrapped`, which lets you check whether a page's contents are wrapped in that string pair. + +If it is *False* or if you want to be on the safe side, pick one of the following: + +1. The easiest way: in your script, do a :meth:`Page._cleanContents` before you do your first item insertion. +2. Pre-process your PDF with the MuPDF command line utility *mutool clean -c ...* and work with its output file instead. +3. Directly wrap the page's :data:`contents` with the stacking commands before you do your first item insertion. + +**Solutions 1. and 2.** use the same technical basis and **do a lot more** than what is required in this context: they also clean up other inconsistencies or redundancies that may exist, multiple */Contents* objects will be concatenated into one, and much more. + +.. note:: For **incremental saves,** solution 1. has an unpleasant implication: it will bloat the update delta, because it changes so many things and, in addition, stores the **cleaned contents uncompressed**. So, if you use :meth:`Page._cleanContents` you should consider **saving to a new file** with (at least) *garbage=3* and *deflate=True*. + +**Solution 3.** is completely under your control and only does the minimum corrective action. There exists a handy low-level utility function which you can use for this. Suggested procedure: + +* **Prepend** the missing stacking command by executing *fitz.TOOLS._insert_contents(page, b"q\n", False)*. +* **Append** an unstacking command by executing *fitz.TOOLS._insert_contents(page, b"\nQ", True)*. +* Alternatively, just use :meth:`Page._wrapContents`, wich executes the previous two functions. + +.. note:: If small incremental update deltas are a concern, this approach is the most effective. Other contents objects are not touched. The utility method creates two new PDF :data:`stream` objects and inserts them before, resp. after the page's other :data:`contents`. We therefore recommend the following snippet to get this situation under control: + + >>> if not page._isWrapped: + page._wrapContents() + >>> # start inserting text, images or annotations here + +-------------------------- + +Low-Level Interfaces +--------------------- +Numerous methods are available to access and manipulate PDF files on a fairly low level. Admittedly, a clear distinction between "low level" and "normal" functionality is not always possible or subject to personal taste. + +It also may happen, that functionality previously deemed low-level is lateron assessed as being part of the normal interface. This has happened in v1.14.0 for the class :ref:`Tools` -- you now find it as an item in the Classes chapter. + +Anyway -- it is a matter of documentation only: in which chapter of the documentation do you find what. Everything is available always and always via the same interface. + +---------------------------------- + +How to Iterate through the :data:`xref` Table +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +A PDF's :data:`xref` table is a list of all objects defined in the file. This table may easily contain many thousand entries -- the manual :ref:`AdobeManual` for example has over 330'000 objects. Table entry "0" is reserved and must not be touched. +The following script loops through the :data:`xref` table and prints each object's definition:: + + >>> xreflen = doc.xrefLength() # length of objects table + >>> for xref in range(1, xreflen): # skip item 0! + print("") + print("object %i (stream: %s)" % (xref, doc.isStream(xref))) + print(doc.xrefObject(i, compressed=False)) + + +.. highlight:: text + +This produces the following output:: + + object 1 (stream: False) + << + /ModDate (D:20170314122233-04'00') + /PXCViewerInfo (PDF-XChange Viewer;2.5.312.1;Feb 9 2015;12:00:06;D:20170314122233-04'00') + >> + + object 2 (stream: False) + << + /Type /Catalog + /Pages 3 0 R + >> + + object 3 (stream: False) + << + /Kids [ 4 0 R 5 0 R ] + /Type /Pages + /Count 2 + >> + + object 4 (stream: False) + << + /Type /Page + /Annots [ 6 0 R ] + /Parent 3 0 R + /Contents 7 0 R + /MediaBox [ 0 0 595 842 ] + /Resources 8 0 R + >> + ... + object 7 (stream: True) + << + /Length 494 + /Filter /FlateDecode + >> + ... + +.. highlight:: python + +A PDF object definition is an ordinary ASCII string. + +---------------------------------- + +How to Handle Object Streams +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Some object types contain additional data apart from their object definition. Examples are images, fonts, embedded files or commands describing the appearance of a page. + +Objects of these types are called "stream objects". PyMuPDF allows reading an object's stream via method :meth:`Document.xrefStream` with the object's :data:`xref` as an argument. And it is also possible to write back a modified version of a stream using :meth:`Document.updatefStream`. + +Assume that the following snippet wants to read all streams of a PDF for whatever reason:: + + >>> xreflen = doc.xrefLength() # number of objects in file + >>> for xref in range(1, xreflen): # skip item 0! + stream = doc.xrefStream(xref) + # do something with it (it is a bytes object or None) + # e.g. just write it back: + if stream: + doc.updatefStream(xref, stream) + +:meth:`Document.xrefStream` automatically returns a stream decompressed as a bytes object -- and :meth:`Document.updatefStream` automatically compresses it (where beneficial). + +---------------------------------- + +How to Handle Page Contents +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +A PDF page can have one or more :data:`contents` objects -- in fact, a page will be empty if it has no such object. These are stream objects describing **what** appears **where** on a page (like text and images). They are written in a special mini-language desribed e.g. in chapter "APPENDIX A - Operator Summary" on page 985 of the :ref:`AdobeManual`. + +Every PDF reader application must be able to interpret the contents syntax to reproduce the intended appearance of the page. + +If multiple :data:`contents` objects are provided, they must be read and interpreted in the specified sequence in exactly the same way as if these streams were provided as a concatenation of the several. + +There are good technical arguments for having multiple :data:`contents` objects: + +* It is a lot easier and faster to just add new :data:`contents` objects than maintaining a single big one (which entails reading, decompressing, modifying, recompressing, and rewriting it for each change). +* When working with incremental updates, a modified big :data:`contents` object will bloat the update delta and can thus easily negate the efficiency of incremental saves. + +For example, PyMuPDF adds new, small :data:`contents` objects in methods :meth:`Page.insertImage`, :meth:`Page.showPDFpage()` and the :ref:`Shape` methods. + +However, there are also situations when a **single** :data:`contents` object is beneficial: it is easier to interpret and better compressible than multiple smaller ones. + +Here are two ways of combining multiple contents of a page:: + + >>> # method 1: use the clean function + >>> for i in range(len(doc)): + doc[i]._cleanContents() # cleans and combines multiple Contents + page = doc[i] # re-read the page (has only 1 contents now) + cont = page._getContents()[0] + # do something with the cleaned, combined contents + + >>> # method 2: concatenate multiple contents yourself + >>> for page in doc: + cont = b"" # initialize contents + for xref in page._getContents(): # loop through content xrefs + cont += doc.xrefStream(xref) + # do something with the combined contents + +The clean function :meth:`Page._cleanContents` does a lot more than just glueing :data:`contents` objects: it also corrects and optimizes the PDF operator syntax of the page and removes any inconsistencies. + +---------------------------------- + +How to Access the PDF Catalog +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +This is a central ("root") object of a PDF. It serves as a starting point to reach important other objects and it also contains some global options for the PDF:: + + >>> import fitz + >>> doc=fitz.open("PyMuPDF.pdf") + >>> cat = doc._getPDFroot() # get xref of the /Catalog + >>> print(doc.xrefObject(cat)) # print object definition + << + /Type/Catalog % object type + /Pages 3593 0 R % points to page tree + /OpenAction 225 0 R % action to perform on open + /Names 3832 0 R % points to global names tree + /PageMode /UseOutlines % initially show the TOC + /PageLabels<>2<
>8<>]>> % names given to pages + /Outlines 3835 0 R % points to outline tree + >> + +.. note:: Indentation, line breaks and comments are inserted here for clarification purposes only and will not normally appear. For more information on the PDF catalog see section 3.6.1 on page 137 of the :ref:`AdobeManual`. + +---------------------------------- + +How to Access the PDF File Trailer +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The trailer of a PDF file is a :data:`dictionary` located towards the end of the file. It contains special objects, and pointers to important other information. See :ref:`AdobeManual` p. 96. Here is an overview: + +======= =========== =================================================================================== +**Key** **Type** **Value** +======= =========== =================================================================================== +Size int Number of entries in the cross-reference table + 1. +Prev int Offset to previous :data:`xref` section (indicates incremental updates). +Root dictionary (indirect) Pointer to the catalog. See previous section. +Encrypt dictionary Pointer to encryption object (encrypted files only). +Info dictionary (indirect) Pointer to information (metadata). +ID array File identifier consisting of two byte strings. +XRefStm int Offset of a cross-reference stream. See :ref:`AdobeManual` p. 109. +======= =========== =================================================================================== + +Access this information via PyMuPDF with :meth:`Document._getTrailerString`. + + >>> import fitz + >>> doc=fitz.open("PyMuPDF.pdf") + >>> trailer=doc._getTrailerString() + >>> print(trailer) + <> + >>> + +---------------------------------- + +How to Access XML Metadata +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +A PDF may contain XML metadata in addition to the standard metadata format. In fact, most PDF reader or modification software adds this type of information when being used to save a PDF (Adobe, Nitro PDF, PDF-XChange, etc.). + +PyMuPDF has no way to **interpret or change** this information directly, because it contains no XML features. The XML metadata is however stored as a :data:`stream` object, so we do provide a way to **read the XML** stream and, potentially, also write back a modified stream or even delete it:: + + >>> metaxref = doc._getXmlMetadataXref() # get xref of XML metadata + >>> # check if metaxref > 0!!! + >>> doc.xrefObject(metaxref) # object definition + '<>' + >>> xmlmetadata = doc.xrefStream(metaxref) # XML data (stream - bytes obj) + >>> print(xmlmetadata.decode("utf8")) # print str version of bytes + + + + ... + omitted data + ... + + +Using some XML package, the XML data can be interpreted and / or modified and then stored back:: + + >>> # write back modified XML metadata: + >>> doc.updatefStream(metaxref, xmlmetadata) + >>> + >>> # if these data are not wanted, delete them: + >>> doc._delXmlMetadata() diff --git a/docs/font.rst b/docs/font.rst new file mode 100644 index 0000000..519ce9b --- /dev/null +++ b/docs/font.rst @@ -0,0 +1,141 @@ +.. _Font: + +================ +Font +================ + +*(New in v1.16.18)* This class represents a font as defined in MuPDF (*fz_font_s* structure). It is required for the new class :ref:`TextWriter` and the new :meth:`Page.writeText`. Currently, it has no connection to how fonts are used in methods ``insertText`` or insertTextbox``, respectively. + +A Font object also contains useful general information, like the font bbox, the number of defined glyphs, glyph names or the bbox of a single glyph. + +**Class API** + +.. class:: Font + + .. method:: __init__(self, fontname=None, fontfile=None, + fontbuffer=None, script=0, language=None, ordering=-1, is_bold=0, + is_italic=0, is_serif=0) + + Font constructor. The large number of parameters are used to locate font, which most closely resembles the requirements. Not all parameters are ever required -- see the below pseudo code explaining the logic how the parameters are evaluated. + + :arg str fontname: one of the :ref:`Base-14-Fonts` or CJK fontnames. Also possible are a select few of other names like (watch the correct spelling): "Arial", "Times", "Times Roman". + + *(Changed in v1.17.4)* + + If you have installed `pymupdf-fonts `_, you can also use the following new "reserved" fontnames: "figo", "figbo", "figit", "figbi", "fimo", and "fimbo". This will provide one of the "FiraGo" or resp. "FiraMono" fonts, created by Mozilla.org. + + :arg str filename: the filename of a fontfile somewhere on your system [#f1]_. + :arg bytes,bytearray,io.BytesIO fontbuffer: a fontfile loaded in memory [#f1]_. + :arg in script: the number of a UCDN script. Currently supported in PyMuPDF are numbers 24, and 32 through 35. + :arg str language: one of the values "zh-Hant" (traditional Chinese), "zh-Hans" (simplified Chinese), "ja" (Japanese) and "ko" (Korean). Otherwise, all ISO 639 codes from the subsets 1, 2, 3 and 5 are also possible, but are currently documentary only. + :arg int ordering: an alternative selector for one of the CJK fonts. + :arg bool is_bold: look for a bold font. + :arg bool is_italic: look for an italic font. + :arg bool is_serif: look for a serifed font. + + :returns: a MuPDF font if successful. This is the overall logic, how an appropriate font is located:: + + if fontfile: + create font from it ignoring other arguments + if not successful -> exception + if fonbuffer: + create font from it ignoring other arguments + if not successful -> exception + if ordering >= 0: + load **"universal"** font ignoring other parameters + # this will always be successful + if fontname: + create a Base14 font, or resp. **"universal"** font, ignoring other parameters + # note: values "Arial", "Times", "Times Roman" are also possible + if not successful -> exception + Finally try to load a "NOTO" font using *script* and *language* parameters. + if not successful: + look for fallback font + + .. note:: + + With the usual abbreviations "helv", "tiro", etc., you will create fonts with the expected names "Helvetica", "Times-Roman" and so on. + + Using *ordering >= 0*, or fontnames starting with "china", "japan" or "korea" will always create the same **"universal"** font **"Droid Sans Fallback Regular"**. This font supports **all CJK and all Latin characters**. + + Actually, you would rarely ever need another font than **"Droid Sans Fallback Regular"**. **Except** that this font file is relatively large and adds about 1.65 MB (compressed) to your PDF file size. If you do not need CJK support, stick with specifying "helv", "tiro" etc., and you will get away with about 35 KB compressed. + + If you **know** you have a mixture of CJK and Latin text, consider just using ``Font(ordering=0)`` because this supports everything and also significantly (by a factor of two to three) speeds up execution: MuPDF will always find any character in this single font and need not check fallbacks. + + But if you do specify a Base-14 fontname, you will still be able to also write CJK characters! MuPDF automatically detects this situation and silently falls back to the universal font (which will then of course also be embedded in your PDF). + + *(New in v1.17.4)* Optionally, a set of new "reserved" fontnames becomes available if you install `pymupdf-fonts `_. The currently available fonts are from the Fira fonts family created by Mozilla. "Fira Mono" is a nice mono-spaced sans font set and FiraGO is another non-serifed "universal" font, set which supports all European languages (including Cyrillic and Greek) plus Thai, Arabian, Hewbrew and Devanagari -- however none of the CJK languages. The size of a FiraGO font is only a quarter of the "Droid Sans Fallback" size (compressed 400 KB vs. 1.65 MB) -- and the style variants bold and italic are available..The following table maps a fontname to the corresponding font: + + =========== ======================================= + Fontname Font + =========== ======================================= + figo FiraGO Regular + figbo FiraGO Bold + figit FiraGO Italic + figbi FiraGO Bold Italic + fimo Fira Mono Regular + fimbo Fira Mono Bold + =========== ======================================= + + **All fonts mentioned here** also support Greek and Cyrillic letters. + + .. method:: has_glyph(chr, language=None, script=0) + + Check whether the unicode *chr* exists in the font or some fallback. May be used to check whether any "TOFU" symbols will appear on output. + + :arg int chr: the unicode of the character (i.e. *ord()*). + :arg str language: the language -- currently unused. + :arg int script: the UCDN script number. + :returns: *True* or *False*. + + .. method:: glyph_advance(chr, language=None, script=0, wmode=0) + + Calculate the "width" of the character's glyph (visual representation). + + :arg int chr: the unicode number of the character. Use ``ord(c)``, not the character itself. Again, this should normally work even if a character is not supported by that font, because fallback fonts will be checked where necessary. + + The other parameters are not in use currently. This especially means that only horizontal text writing is supported. + + :returns: a float representing the glyph's width relative to **fontsize 1**. + + .. method:: glyph_name_to_unicode(name) + + Return the unicode for a given glyph name. Use it in conjunction with ``chr()`` if you want to output e.g. a certain symbol. + + :arg str name: The name of the glyph. + + :returns: The unicode integer, or 65533 = 0xFFFD if the name is unknown. Examples: ``font.glyph_name_to_unicode("Sigma") = 931``, ``font.glyph_name_to_unicode("sigma") = 963``. Refer to e.g. `this `_ publication for a list of glyph names and their unicode numbers. + + .. method:: unicode_to_glyph_name(chr, language=None, script=0, wmode=0) + + Show the name of the character's glyph. + + :arg int chr: the unicode number of the character. Use ``ord(c)``, not the character itself. + + :returns: a string representing the glyph's name. E.g. ``font.glyph_name(ord("#")) = "numbersign"``. Depending on how this font was built, the string may be empty, ".notfound" or some generated name. + + .. method:: text_length(text, fontsize=11) + + Calculate the length of a unicode string. + + :arg str text: a text string -- UTF-8 encoded. For Python 2, you must use unicode here. + + :arg float fontsize: the fontsize. + + :returns: a float representing the length of the string when stored in the PDF. Internally :meth:`glyph_advance` is used on a by-character level. If the font does not have a character, it will automatically be looked up in a fallback font. + + .. attribute:: flags + + A dictionary with various font properties, each represented as bools. + + .. attribute:: name + + Name of the font. May be "" or "(null)". + + .. attribute:: glyph_count + + The number of glyphs defined in the font. + +.. rubric:: Footnotes + +.. [#f1] MuPDF does not support all fontfiles with this feature and will raise exceptions like *"mupdf: FT_New_Memory_Face((null)): unknown file format"*, if encounters issues. diff --git a/docs/functions.rst b/docs/functions.rst new file mode 100644 index 0000000..10453e4 --- /dev/null +++ b/docs/functions.rst @@ -0,0 +1,704 @@ +============ +Functions +============ +The following are miscellaneous functions and attributes on a fairly low-level technical detail. + +Some functions provide detail access to PDF structures. Others are stripped-down, high performance versions of other functions which provide more information. + +Yet others are handy, general-purpose utilities. + + +==================================== ============================================================== +**Function** **Short Description** +==================================== ============================================================== +:meth:`Annot._cleanContents` PDF only: clean the annot's :data:`contents` objects +:meth:`Annot.setAPNMatrix` PDF only: set the matrix of the appearance object +:meth:`Annot.setAPNMatrix` PDF only: set the matrix of the appearance object +:attr:`Annot.APNMattrix` PDF only: the matrix of the appearance object +:attr:`Annot.APNBBox` PDF only: bbox of the appearance object +:meth:`ConversionHeader` return header string for *getText* methods +:meth:`ConversionTrailer` return trailer string for *getText* methods +:meth:`Document._delXmlMetadata` PDF only: remove XML metadata +:meth:`Document._deleteObject` PDF only: delete an object +:meth:`Document._getNewXref` PDF only: create and return a new :data:`xref` entry +:meth:`Document._getOLRootNumber` PDF only: return / create :data:`xref` of */Outline* +:meth:`Document._getPDFroot` PDF only: return the :data:`xref` of the catalog +:meth:`Document._getPageObjNumber` PDF only: return :data:`xref` and generation number of a page +:meth:`Document._getPageXref` PDF only: same as *_getPageObjNumber()* +:meth:`Document._getTrailerString` PDF only: return the PDF file trailer string +:meth:`Document._getXmlMetadataXref` PDF only: return XML metadata :data:`xref` number +:meth:`Document._getXrefLength` PDF only: return length of :data:`xref` table +:meth:`Document._getXrefStream` PDF only: return content of a stream object +:meth:`Document._getXrefString` PDF only: return object definition "source" +:meth:`Document._make_page_map` PDF only: create a fast-access array of page numbers +:meth:`Document._updateObject` PDF only: insert or update a PDF object +:meth:`Document._updateStream` PDF only: replace the stream of an object +:meth:`Document.extractFont` PDF only: extract embedded font +:meth:`Document.extractImage` PDF only: extract embedded image +:meth:`Document.getCharWidths` PDF only: return a list of glyph widths of a font +:meth:`Document.isStream` PDF only: check whether an :data:`xref` is a stream object +:attr:`Document.FontInfos` PDF only: information on inserted fonts +:meth:`ImageProperties` return a dictionary of basic image properties +:meth:`getPDFnow` return the current timestamp in PDF format +:meth:`getPDFstr` return PDF-compatible string +:meth:`getTextlength` return string length for a given font & fontsize +:meth:`Page.cleanContents` PDF only: clean the page's :data:`contents` objects +:meth:`Page._getContents` PDF only: return a list of content numbers +:meth:`Page._setContents` PDF only: set page's :data:`contents` to some :data:`xref` +:meth:`Page.getDisplayList` create the page's display list +:meth:`Page.getTextBlocks` extract text blocks as a Python list +:meth:`Page.getTextWords` extract text words as a Python list +:meth:`Page.run` run a page through a device +:meth:`Page.readContents` PDF only: get complete, concatenated /Contents source +:meth:`Page.wrapContents` wrap contents with stacking commands +:attr:`Page._isWrapped` check whether contents wrapping is present +:meth:`planishLine` matrix to map a line to the x-axis +:meth:`PaperSize` return width, height for a known paper format +:meth:`PaperRect` return rectangle for a known paper format +:meth:`sRGB_to_pdf` return PDF RGB color tuple from a sRGB integer +:meth:`sRGB_to_rgb` return (R, G, B) color tuple from a sRGB integer +:meth:`make_table` return list of table cells for a given rectangle +:attr:`paperSizes` dictionary of pre-defined paper formats +==================================== ============================================================== + + .. method:: PaperSize(s) + + Convenience function to return width and height of a known paper format code. These values are given in pixels for the standard resolution 72 pixels = 1 inch. + + Currently defined formats include **'A0'** through **'A10'**, **'B0'** through **'B10'**, **'C0'** through **'C10'**, **'Card-4x6'**, **'Card-5x7'**, **'Commercial'**, **'Executive'**, **'Invoice'**, **'Ledger'**, **'Legal'**, **'Legal-13'**, **'Letter'**, **'Monarch'** and **'Tabloid-Extra'**, each in either portrait or landscape format. + + A format name must be supplied as a string (case **in** \sensitive), optionally suffixed with "-L" (landscape) or "-P" (portrait). No suffix defaults to portrait. + + :arg str s: any format name from above (upper or lower case), like *"A4"* or *"letter-l"*. + + :rtype: tuple + :returns: *(width, height)* of the paper format. For an unknown format *(-1, -1)* is returned. Esamples: *fitz.PaperSize("A4")* returns *(595, 842)* and *fitz.PaperSize("letter-l")* delivers *(792, 612)*. + +----- + + .. method:: PaperRect(s) + + Convenience function to return a :ref:`Rect` for a known paper format. + + :arg str s: any format name supported by :meth:`PaperSize`. + + :rtype: :ref:`Rect` + :returns: *fitz.Rect(0, 0, width, height)* with *width, height=fitz.PaperSize(s)*. + + >>> import fitz + >>> fitz.PaperRect("letter-l") + fitz.Rect(0.0, 0.0, 792.0, 612.0) + >>> + +----- + + .. method:: sRGB_to_pdf(srgb) + + *New in v1.17.4* + + Convenience function returning a PDF color triple (red, green, blue) for a given sRGB color integer as it occurs in :meth:`Page.getText` dictionaries "dict" and "rawdict". + + :arg int srgb: an integer of format RRGGBB, where each color component is an integer in range(255). + + :returns: a tuple (red, green, blue) with float items in intervall *0 <= item <= 1* representing the same color. + +----- + + .. method:: sRGB_to_rgb(srgb) + + *New in v1.17.4* + + Convenience function returning a color (red, green, blue) for a given sRGB color integer . + + :arg int srgb: an integer of format RRGGBB, where each color component is an integer in range(255). + + :returns: a tuple (red, green, blue) with integer items in intervall *0 <= item <= 255* representing the same color. + +----- + + .. method:: make_table(rect=(0, 0, 1, 1), cols=1, rows=1) + + *New in v1.17.4* + + Convenience function returning a list of :ref:`Rect` objects representing equal sized table cells for the given rectangle. + + :arg rect_like rect: the rectangle to contain the table. + :arg int cols: the desired number of columns. + :arg int rows: the desired number of rows. + :returns: a list of :ref:`Rect` objects of equal size, whose union equals *rect*:: + + [ + [cell00, cell01, ...] # row 0 + ... + [...] # last row + ] + +----- + + .. method:: planishLine(p1, p2) + + *(New in version 1.16.2)* + + Return a matrix which maps the line from p1 to p2 to the x-axis such that p1 will become (0,0) and p2 a point with the same distance to (0,0). + + :arg point_like p1: starting point of the line. + :arg point_like p2: end point of the line. + + :rtype: :ref:`Matrix` + :returns: + + a matrix which combines a rotation and a translation:: + + p1 = fitz.Point(1, 1) + p2 = fitz.Point(4, 5) + abs(p2 - p1) # distance of points + 5.0 + m = fitz.planishLine(p1, p2) + p1 * m + Point(0.0, 0.0) + p2 * m + Point(5.0, -5.960464477539063e-08) + # distance of the resulting points + abs(p2 * m - p1 * m) + 5.0 + + + .. image:: images/img-planish.png + :scale: 40 + + +----- + + .. attribute:: paperSizes + + A dictionary of pre-defines paper formats. Used as basis for :meth:`PaperSize`. + +----- + + .. method:: getPDFnow() + + Convenience function to return the current local timestamp in PDF compatible format, e.g. *D:20170501121525-04'00'* for local datetime May 1, 2017, 12:15:25 in a timezone 4 hours westward of the UTC meridian. + + :rtype: str + :returns: current local PDF timestamp. + +----- + + .. method:: getTextlength(text, fontname="helv", fontsize=11, encoding=TEXT_ENCODING_LATIN) + + *(New in version 1.14.7)* + + Calculate the length of text on output with a given **builtin** font, fontsize and encoding. + + :arg str text: the text string. + :arg str fontname: the fontname. Must be one of either the :ref:`Base-14-Fonts` or the CJK fonts, identified by their "reserved" fontnames (see table in :meth.`Page.insertFont`). + :arg float fontsize: size of the font. + :arg int encoding: the encoding to use. Besides 0 = Latin, 1 = Greek and 2 = Cyrillic (Russian) are available. Relevant for Base-14 fonts "Helvetica", "Courier" and "Times" and their variants only. Make sure to use the same value as in the corresponding text insertion. + :rtype: float + :returns: the length in points the string will have (e.g. when used in :meth:`Page.insertText`). + + .. note:: This function will only do the calculation -- it won't insert font or text. + + .. warning:: If you use this function to determine the required rectangle width for the (:ref:`Page` or :ref:`Shape`) *insertTextbox* methods, be aware that they calculate on a **by-character level**. Because of rounding effects, this will mostly lead to a slightly larger number: *sum([fitz.getTextlength(c) for c in text]) > fitz.getTextlength(text)*. So either (1) do the same, or (2) use something like *fitz.getTextlength(text + "'")* for your calculation. + +----- + + .. method:: getPDFstr(text) + + Make a PDF-compatible string: if the text contains code points *ord(c) > 255*, then it will be converted to UTF-16BE with BOM as a hexadecimal character string enclosed in "<>" brackets like **. Otherwise, it will return the string enclosed in (round) brackets, replacing any characters outside the ASCII range with some special code. Also, every "(", ")" or backslash is escaped with an additional backslash. + + :arg str text: the object to convert + + :rtype: str + :returns: PDF-compatible string enclosed in either *()* or *<>*. + +----- + + .. method:: ImageProperties(stream) + + *(New in version 1.14.14)* + + Return a number of basic properties for an image. + + :arg bytes|bytearray|BytesIO|file stream: an image either in memory or an **opened** file. A memory resident image maybe any of the formats *bytes*, *bytearray* or *io.BytesIO*. + + :returns: a dictionary with the following keys (an empty dictionary for any error): + + ========== ==================================================== + **Key** **Value** + ========== ==================================================== + width (int) width in pixels + height (int) height in pixels + colorspace (int) colorspace.n (e.g. 3 = RGB) + bpc (int) bits per component (usually 8) + format (int) image format in *range(15)* + ext (str) image file extension indicating the format + size (int) length of the image in bytes + ========== ==================================================== + + Example: + + >>> fitz.ImageProperties(open("img-clip.jpg","rb")) + {'bpc': 8, 'format': 9, 'colorspace': 3, 'height': 325, 'width': 244, 'ext': 'jpeg', 'size': 14161} + >>> + + +----- + + .. method:: ConversionHeader("text", filename="UNKNOWN") + + Return the header string required to make a valid document out of page text outputs. + + :arg str output: type of document. Use the same as the output parameter of *getText()*. + + :arg str filename: optional arbitrary name to use in output types "json" and "xml". + + :rtype: str + +----- + + .. method:: ConversionTrailer(output) + + Return the trailer string required to make a valid document out of page text outputs. See :meth:`Page.getText` for an example. + + :arg str output: type of document. Use the same as the output parameter of *getText()*. + + :rtype: str + +----- + + .. method:: Document._deleteObject(xref) + + PDF only: Delete an object given by its cross reference number. + + :arg int xref: the cross reference number. Must be within the document's valid :data:`xref` range. + + .. warning:: Only use with extreme care: this may make the PDF unreadable. + +----- + + .. method:: Document._delXmlMetadata() + + Delete an object containing XML-based metadata from the PDF. (Py-) MuPDF does not support XML-based metadata. Use this if you want to make sure that the conventional metadata dictionary will be used exclusively. Many thirdparty PDF programs insert their own metadata in XML format and thus may override what you store in the conventional dictionary. This method deletes any such reference, and the corresponding PDF object will be deleted during next garbage collection of the file. + +----- + + .. method:: Document._getTrailerString(compressed=False) + + *(New in version 1.14.9)* + + Return the trailer of the PDF (UTF-8), which is usually located at the PDF file's end. If not a PDF or the PDF has no trailer (because of irrecoverable errors), *None* is returned. + + :arg bool compressed: *(ew in version 1.14.14)* whether to generate a compressed output or one with nice indentations to ease reading (default). + + :returns: a string with the PDF trailer information. This is the analogous method to :meth:`Document._getXrefString` except that the trailer has no identifying :data:`xref` number. As can be seen here, the trailer object points to other important objects: + + >>> doc=fitz.open("adobe.pdf") + >>> # compressed output + >>> print(doc._getTrailerString(True)) + <> + >>> # non-compressed otput: + >>> print(doc._getTrailerString(False)) + << + /Size 334093 + /Prev 25807185 + /XRefStm 186352 + /Root 333277 0 R + /Info 109959 0 R + /ID [ (\227\366/gx\016ds\244\207\326\261\\\305\376u) (H\323\177\346\371pkF\243\262\375\346\325\002) ] + >> + + .. note:: MuPDF is capable of recovering from a number of damages a PDF may have. This includes re-generating a trailer, where the end of a file has been lost (e.g. because of incomplete downloads). If however *None* is returned for a PDF, then the recovery mechanisms were unsuccessful and you should check for any error messages (:attr:`Document.openErrCode`, :attr:`Document.openErrMsg`, :attr:`Tools.fitz_stderr`). + + +----- + + .. method:: Document._make_page_map() + + Create an internal array of page numbers, which significantly speeds up page lookup (:meth:`Document.loadPage`). If this array exists, finding a page object will be up to two times faster. Functions which change the PDF's page layout (copy, delete, move, select pages) will destroy this array again. + +----- + + .. method:: Document._getXmlMetadataXref() + + Return the XML-based metadata :data:`xref` of the PDF if present -- also refer to :meth:`Document._delXmlMetadata`. You can use it to retrieve the content via :meth:`Document._getXrefStream` and then work with it using some XML software. + + :rtype: int + :returns: :data:`xref` of PDF file level XML metadata. + +----- + + .. method:: Document._getPageObjNumber(pno) + + or + + .. method:: Document._getPageXref(pno) + + Return the :data:`xref` and generation number for a given page. + + :arg int pno: Page number (zero-based). + + :rtype: list + :returns: :data:`xref` and generation number of page *pno* as a list *[xref, gen]*. + +----- + + .. method:: Document._getPDFroot() + + Return the :data:`xref` of the PDF catalog. + + :rtype: int + :returns: :data:`xref` of the PDF catalog -- a central :data:`dictionary` pointing to many other PDF information. + +----- + + .. method:: Page.run(dev, transform) + + Run a page through a device. + + :arg dev: Device, obtained from one of the :ref:`Device` constructors. + :type dev: :ref:`Device` + + :arg transform: Transformation to apply to the page. Set it to :ref:`Identity` if no transformation is desired. + :type transform: :ref:`Matrix` + +----- + + .. method:: Page.wrapContents + + Put string pair "q" / "Q" before, resp. after a page's */Contents* object(s) to ensure that any "geometry" changes are **local** only. + + Use this method as an alternative, minimalistic version of :meth:`Page.cleanContents`. Its advantage is a small footprint in terms of processing time and impact on incremental saves. + +----- + + .. attribute:: Page._isWrapped + + Indicate whether :meth:`Page.wrapContents` may be required for object insertions in standard PDF geometry. Please note that this is a quick, basic check only: a value of *False* may still be a false alarm. + +----- + + .. method:: Page.getTextBlocks(flags=None) + + Deprecated wrapper for :meth:`TextPage.extractBLOCKS`. + +----- + + .. method:: Page.getTextWords(flags=None) + + Deprecated wrapper for :meth:`TextPage.extractWORDS`. + +----- + + .. method:: Page.getDisplayList() + + Run a page through a list device and return its display list. + + :rtype: :ref:`DisplayList` + :returns: the display list of the page. + +----- + + .. method:: Page._getContents() + + Return a list of :data:`xref` numbers of :data:`contents` objects belonging to the page. + + :rtype: list + :returns: a list of :data:`xref` integers. + + Each page may have zero to many associated contents objects (:data:`stream` \s) which contain some operator syntax describing what appears where and how on the page (like text or images, etc. See the :ref:`AdobeManual`, chapter "Operator Summary", page 985). This function only enumerates the number(s) of such objects. To get the actual stream source, use function :meth:`Document._getXrefStream` with one of the numbers in this list. Use :meth:`Document._updateStream` to replace the content. + +----- + + .. method:: Page._setContents(xref) + + PDF only: Set a given object (identified by its :data:`xref`) as the page's one and only :data:`contents` object. Useful for joining mutiple :data:`contents` objects as in the following snippet:: + + >>> c = b"" + >>> xreflist = page._getContents() + >>> for xref in xreflist: + c += doc._getXrefStream(xref) + >>> doc._updateStream(xreflist[0], c) + >>> page._setContents(xreflist[0]) + >>> # doc.save(..., garbage=1) will remove the unused objects + + :arg int xref: the cross reference number of a :data:`contents` object. An exception is raised if outside the valid :data:`xref` range or not a stream object. + +----- + + .. method:: Page.cleanContents() + + Clean and concatenate all :data:`contents` objects associated with this page. "Cleaning" includes syntactical corrections, standardizations and "pretty printing" of the contents stream. Discrepancies between :data:`contents` and :data:`resources` objects will also be corrected. See :meth:`Page._getContents` for more details. + + Changed in version 1.16.0 Annotations are no longer implicitely cleaned by this method. Use :meth:`Annot._cleanContents` separately. + + .. warning:: This is a complex function which may generate large amounts of new data and render other data unused. It is **not recommended** using it together with the **incremental save** option. Also note that the resulting singleton new */Contents* object is **uncompressed**. So you should save to a **new file** using options *"deflate=True, garbage=3"*. + +----- + + .. method:: Page.readContents() + + *New in version 1.17.0.* + Return the concatenation of all :data:`contents` objects associated with the page -- without cleaning or otherwise modifying them. Use this method whenever you need to parse this source in its entirety whithout having to bother how many separate contents objects exist. + + +----- + + .. method:: Annot._cleanContents() + + Clean the :data:`contents` streams associated with the annotation. This is the same type of action which :meth:`Page._cleanContents` performs -- just restricted to this annotation. + + +----- + + .. method:: Document.getCharWidths(xref=0, limit=256) + + Return a list of character glyphs and their widths for a font that is present in the document. A font must be specified by its PDF cross reference number :data:`xref`. This function is called automatically from :meth:`Page.insertText` and :meth:`Page.insertTextbox`. So you should rarely need to do this yourself. + + :arg int xref: cross reference number of a font embedded in the PDF. To find a font :data:`xref`, use e.g. *doc.getPageFontList(pno)* of page number *pno* and take the first entry of one of the returned list entries. + + :arg int limit: limits the number of returned entries. The default of 256 is enforced for all fonts that only support 1-byte characters, so-called "simple fonts" (checked by this method). All :ref:`Base-14-Fonts` are simple fonts. + + :rtype: list + :returns: a list of *limit* tuples. Each character *c* has an entry *(g, w)* in this list with an index of *ord(c)*. Entry *g* (integer) of the tuple is the glyph id of the character, and float *w* is its normalized width. The actual width for some fontsize can be calculated as *w * fontsize*. For simple fonts, the *g* entry can always be safely ignored. In all other cases *g* is the basis for graphically representing *c*. + + This function calculates the pixel width of a string called *text*:: + + def pixlen(text, widthlist, fontsize): + try: + return sum([widthlist[ord(c)] for c in text]) * fontsize + except IndexError: + m = max([ord(c) for c in text]) + raise ValueError:("max. code point found: %i, increase limit" % m) + +----- + + .. method:: Document._getXrefString(xref, compressed=False) + + Return the string ("source code") representing an arbitrary object. For :data:`stream` objects, only the non-stream part is returned. To get the stream data, use :meth:`_getXrefStream`. + + :arg int xref: :data:`xref` number. + :arg bool compressed: *(new in version 1.14.14)* whether to generate a compressed output or one with nice indentations to ease reading or parsing (default). + + :rtype: string + :returns: the string defining the object identified by :data:`xref`. Example: + + >>> doc = fitz.open("Adobe PDF Reference 1-7.pdf") # the PDF + >>> page = doc[100] # some page in it + >>> print(doc._getXrefString(page.xref, compressed=True)) + <>/ProcSet[/PDF/Text]/ExtGState<>>> + /Type/Page>> + >>> print(doc._getXrefString(page.xref, compressed=False)) + << + /CropBox [ 0 0 531 666 ] + /Annots [ 4795 0 R 4794 0 R 4793 0 R 4792 0 R 4797 0 R 4796 0 R ] + /Parent 109820 0 R + /StructParents 941 + /Contents 229 0 R + /Rotate 0 + /MediaBox [ 0 0 531 666 ] + /Resources << + /Font << + /T1_0 3914 0 R + /T1_1 3912 0 R + /T1_2 3957 0 R + /T1_3 3913 0 R + /T1_4 4576 0 R + /T1_5 3931 0 R + /T1_6 3944 0 R + >> + /ProcSet [ /PDF /Text ] + /ExtGState << + /GS0 333283 0 R + >> + >> + /Type /Page + >> + +----- + + .. method:: Document.isStream(xref) + + *(New in version 1.14.14)* + + PDF only: Check whether the object represented by :data:`xref` is a :data:`stream` type. Return is *False* if not a PDF or if the number is outside the valid xref range. + + :arg int xref: :data:`xref` number. + + :returns: *True* if the object definition is followed by data wrapped in keyword pair *stream*, *endstream*. + +----- + + .. method:: Document._getNewXref() + + Increase the :data:`xref` by one entry and return that number. This can then be used to insert a new object. + + :rtype: int + :returns: the number of the new :data:`xref` entry. + +----- + + .. method:: Document._updateObject(xref, obj_str, page=None) + + Associate the object identified by string *obj_str* with *xref*, which must already exist. If *xref* pointed to an existing object, this will be replaced with the new object. If a page object is specified, links and other annotations of this page will be reloaded after the object has been updated. + + :arg int xref: :data:`xref` number. + + :arg str obj_str: a string containing a valid PDF object definition. + + :arg page: a page object. If provided, indicates, that annotations of this page should be refreshed (reloaded) to reflect changes incurred with links and / or annotations. + :type page: :ref:`Page` + + :rtype: int + :returns: zero if successful, otherwise an exception will be raised. + +----- + + .. method:: Document._getXrefLength() + + Return length of :data:`xref` table. + + :rtype: int + :returns: the number of entries in the :data:`xref` table. + +----- + + .. method:: Document._getXrefStream(xref) + + Return the decompressed stream of the object referenced by *xref*. For non-stream objects *None* is returned. + + :arg int xref: :data:`xref` number. + + :rtype: bytes + :returns: the (decompressed) stream of the object. + +----- + + .. method:: Document._updateStream(xref, stream, new=False) + + Replace the stream of an object identified by *xref*. If the object has no stream, an exception is raised unless *new=True* is used. The function automatically performs a compress operation ("deflate") where beneficial. + + :arg int xref: :data:`xref` number. + + :arg bytes|bytearray|BytesIO stream: the new content of the stream. + + *(Changed in version 1.14.13:)* *io.BytesIO* objects are now also supported. + + :arg bool new: whether to force accepting the stream, and thus **turning it into a stream object**. + + This method is intended to manipulate streams containing PDF operator syntax (see pp. 985 of the :ref:`AdobeManual`) as it is the case for e.g. page content streams. + + If you update a contents stream, you should use save parameter *clean=True*. This ensures consistency between PDF operator source and the object structure. + + Example: Let us assume that you no longer want a certain image appear on a page. This can be achieved by deleting the respective reference in its contents source(s) -- and indeed: the image will be gone after reloading the page. But the page's :data:`resources` object would still show the image as being referenced by the page. This save option will clean up any such mismatches. + +----- + + .. method:: Document._getOLRootNumber() + + Return :data:`xref` number of the /Outlines root object (this is **not** the first outline entry!). If this object does not exist, a new one will be created. + + :rtype: int + :returns: :data:`xref` number of the **/Outlines** root object. + + .. method:: Document.extractImage(xref) + + PDF Only: Extract data and meta information of an image stored in the document. The output can directly be used to be stored as an image file, as input for PIL, :ref:`Pixmap` creation, etc. This method avoids using pixmaps wherever possible to present the image in its original format (e.g. as JPEG). + + :arg int xref: :data:`xref` of an image object. If this is not in *range(1, doc.xrefLength())*, or the object is no image or other errors occur, *None* is returned and no exception is raised. + + :rtype: dict + :returns: a dictionary with the following keys + + * *ext* (*str*) image type (e.g. *'jpeg'*), usable as image file extension + * *smask* (*int*) :data:`xref` number of a stencil (/SMask) image or zero + * *width* (*int*) image width + * *height* (*int*) image height + * *colorspace* (*int*) the image's *colorspace.n* number. + * *cs-name* (*str*) the image's *colorspace.name*. + * *xres* (*int*) resolution in x direction. Please also see :data:`resolution`. + * *yres* (*int*) resolution in y direction. Please also see :data:`resolution`. + * *image* (*bytes*) image data, usable as image file content + + >>> d = doc.extractImage(1373) + >>> d + {'ext': 'png', 'smask': 2934, 'width': 5, 'height': 629, 'colorspace': 3, 'xres': 96, + 'yres': 96, 'cs-name': 'DeviceRGB', + 'image': b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x05\ ...'} + >>> imgout = open("image." + d["ext"], "wb") + >>> imgout.write(d["image"]) + 102 + >>> imgout.close() + + .. note:: There is a functional overlap with *pix = fitz.Pixmap(doc, xref)*, followed by a *pix.getPNGData()*. Main differences are that extractImage, **(1)** does not only deliver PNG image formats, **(2)** is **very** much faster with non-PNG images, **(3)** usually results in much less disk storage for extracted images, **(4)** returns *None* in error cases (generates no exception). Look at the following example images within the same PDF. + + * xref 1268 is a PNG -- Comparable execution time and identical output:: + + In [23]: %timeit pix = fitz.Pixmap(doc, 1268);pix.getPNGData() + 10.8 ms ± 52.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) + In [24]: len(pix.getPNGData()) + Out[24]: 21462 + + In [25]: %timeit img = doc.extractImage(1268) + 10.8 ms ± 86 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) + In [26]: len(img["image"]) + Out[26]: 21462 + + * xref 1186 is a JPEG -- :meth:`Document.extractImage` is **many times faster** and produces a **much smaller** output (2.48 MB vs. 0.35 MB):: + + In [27]: %timeit pix = fitz.Pixmap(doc, 1186);pix.getPNGData() + 341 ms ± 2.86 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) + In [28]: len(pix.getPNGData()) + Out[28]: 2599433 + + In [29]: %timeit img = doc.extractImage(1186) + 15.7 µs ± 116 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) + In [30]: len(img["image"]) + Out[30]: 371177 + + .. method:: Document.extractFont(xref, info_only=False) + + PDF Only: Return an embedded font file's data and appropriate file extension. This can be used to store the font as an external file. The method does not throw exceptions (other than via checking for PDF and valid :data:`xref`). + + :arg int xref: PDF object number of the font to extract. + :arg bool info_only: only return font information, not the buffer. To be used for information-only purposes, avoids allocation of large buffer areas. + + :rtype: tuple + :returns: a tuple *(basename, ext, subtype, buffer)*, where *ext* is a 3-byte suggested file extension (*str*), *basename* is the font's name (*str*), *subtype* is the font's type (e.g. "Type1") and *buffer* is a bytes object containing the font file's content (or *b""*). For possible extension values and their meaning see :ref:`FontExtensions`. Return details on error: + + * *("", "", "", b"")* -- invalid xref or xref is not a (valid) font object. + * *(basename, "n/a", "Type1", b"")* -- *basename* is one of the :ref:`Base-14-Fonts`, which cannot be extracted. + + Example: + + >>> # store font as an external file + >>> name, ext, buffer = doc.extractFont(4711) + >>> # assuming buffer is not None: + >>> ofile = open(name + "." + ext, "wb") + >>> ofile.write(buffer) + >>> ofile.close() + + .. warning:: The basename is returned unchanged from the PDF. So it may contain characters (such as blanks) which may disqualify it as a filename for your operating system. Take appropriate action. + + .. note: The returned *basename* in general is **not** the original file name, but it probably has some similarity. + + .. attribute:: Document.FontInfos + + Contains following information for any font inserted via :meth:`Page.insertFont` in **this** session of PyMuPDF: + + * xref *(int)* -- XREF number of the */Type/Font* object. + * info *(dict)* -- detail font information with the following keys: + + * name *(str)* -- name of the basefont + * idx *(int)* -- index number for multi-font files + * type *(str)* -- font type (like "TrueType", "Type0", etc.) + * ext *(str)* -- extension to be used, when font is extracted to a file (see :ref:`FontExtensions`). + * glyphs (*list*) -- list of glyph numbers and widths (filled by textinsertion methods). + + :rtype: list + diff --git a/docs/glossary.rst b/docs/glossary.rst new file mode 100644 index 0000000..73fd649 --- /dev/null +++ b/docs/glossary.rst @@ -0,0 +1,118 @@ +============== +Glossary +============== + +.. data:: matrix_like + + A Python sequence of 6 numbers. + +.. data:: rect_like + + A Python sequence of 4 numbers. + +.. data:: irect_like + + A Python sequence of 4 integers. + +.. data:: point_like + + A Python sequence of 2 numbers. + +.. data:: quad_like + + A Python sequence of 4 :data:`point_like` items. + +.. data:: inheritable + + A number of values in a PDF can be specified once and then be inherited by objects further down in a parent-child relationship. The mediabox (physical size) of pages can for example be specified in nodes of the :data:`pagetree` and will then be taken as value for all *kids*, which do not specify their own value. + +.. data:: MediaBox + + A PDF array of 4 floats specifying a physical page size (:data:`inheritable`). + +.. data:: CropBox + + A PDF array of 4 floats specifying a page's visible area (:data:`inheritable`). This value is **not affected** if the page is rotated. + + +.. data:: catalog + + A central PDF :data:`dictionary` -- also called "root" -- containing pointers to many other information. + +.. data:: contents + + "A **content stream** is a PDF :data:`stream` :data:`object` whose data consists of a sequence of instructions describing the graphical elements to be painted on a page." (:ref:`AdobeManual` p. 151). For an overview of the mini-language used in these streams see chapter "Operator Summary" on page 985 of the :ref:`AdobeManual`. A PDF :data:`page` can have none to many contents objects. If it has none, the page is empty (but still may show annotations). If it has several, they will be interpreted in sequence as if their instructions had been present in one such object (i.e. like in a concatenated string). It should be noted that there are more stream object types which use the same syntax: e.g. appearance dictionaries associated with annotations and Form XObjects. + +.. data:: resources + + A :data:`dictionary` containing references to any resources (like images or fonts) required by a PDF :data:`page` (required, inheritable, :ref:`AdobeManual` p. 145) and certain other objects (Form XObjects). This dictionary appears as a sub-dictionary in the object definition under the key */Resources*. Being an inheritable object type, there may exist "parent" resources for all pages or certain subsets of pages. + +.. data:: dictionary + + A PDF :data:`object` type, which is somewhat comparable to the same-named Python notion: "A dictionary object is an associative table containing pairs of objects, known as the dictionary's entries. The first element of each entry is the key and the second element is the value. The key must be a name (...). The value can be any kind of object, including another dictionary. A dictionary entry whose value is null (...) is equivalent to an absent entry." (:ref:`AdobeManual` p. 59). + + Dictionaries are the most important :data:`object` type in PDF. Here is an example (describing a :data:`page`):: + + << + /Contents 40 0 R % value: an indirect object + /Type/Page % value: a name object + /MediaBox[0 0 595.32 841.92] % value: an array object + /Rotate 0 % value: a number object + /Parent 12 0 R % value: an indirect object + /Resources<< % value: a dictionary object + /ExtGState<> + /Font<< + /R8 27 0 R/R10 21 0 R/R12 24 0 R/R14 15 0 R + /R17 4 0 R/R20 30 0 R/R23 7 0 R /R27 20 0 R + >> + /ProcSet[/PDF/Text] % value: array of two name objects + >> + /Annots[55 0 R] % value: array, one entry (indirect object) + >> + + *Contents*, *Type*, *MediaBox*, etc. are **keys**, *40 0 R*, *Page*, *[0 0 595.32 841.92]*, etc. are the respective **values**. The strings *"<<"* and *">>"* are used to enclose object definitions. + + This example also shows the syntax of **nested** dictionary values: *Resources* has an object as its value, which in turn is a dictionary with keys like *ExtGState* (with the value *<>*, which is another dictionary), etc. + +.. data:: page + + A PDF page is a :data:`dictionary` object which defines one page in a PDF, see :ref:`AdobeManual` p. 145. + +.. data:: pagetree + + "The pages of a document are accessed through a structure known as the page tree, which defines the ordering of pages in the document. The tree structure allows PDF consumer applications, using only limited memory, to quickly open a document containing thousands of pages. The tree contains nodes of two types: intermediate nodes, called page tree nodes, and leaf nodes, called page objects." (:ref:`AdobeManual` p. 143). + + While it is possible to list all page references in just one array, PDFs with many pages are often created using *balanced tree* structures ("page trees") for faster access to any single page. In relation to the total number of pages, this can reduce the average page access time by page number from a linear to some logarithmic order of magnitude. + + For fast page access, MuPDF can use its own array in memory -- independently from what may or may not be present in the document file. This array is indexed by page number and therefore much faster than even the access via a perfectly balanced page tree. + +.. data:: object + + Similar to Python, PDF supports the notion *object*, which can come in eight basic types: boolean values, integer and real numbers, strings, names, arrays, dictionaries, streams, and the null object (:ref:`AdobeManual` p. 51). Objects can be made identifyable by assigning a label. This label is then called *indirect* object. PyMuPDF supports retrieving definitions of indirect objects via their cross reference number via :meth:`Document.xrefObject`. + +.. data:: stream + + A PDF :data:`object` type which is a sequence of bytes, similar to a string. "However, a PDF application can read a stream incrementally, while a string must be read in its entirety. Furthermore, a stream can be of unlimited length, whereas a string is subject to an implementation limit. For this reason, objects with potentially large amounts of data, such as images and page descriptions, are represented as streams." "A stream consists of a :data:`dictionary` followed by zero or more bytes bracketed between the keywords *stream* and *endstream*":: + + nnn 0 obj + << + dictionary definition + >> + stream + (zero or more bytes) + endstream + endobj + + See :ref:`AdobeManual` p. 60. PyMuPDF supports retrieving stream content via :meth:`Document.xrefStream`. Use :meth:`Document.isStream` to determine whether an object is of stream type. + +.. data:: unitvector + + A mathematical notion meaning a vector of norm ("length") 1 -- usually the Euclidean norm is implied. In PyMuPDF, this term is restricted to :ref:`Point` objects, see :attr:`Point.unit`. + +.. data:: xref + + Abbreviation for cross-reference number: this is an integer unique identification for objects in a PDF. There exists a cross-reference table (which may physically consist of several separate segments) in each PDF, which stores the relative position of each object for quick lookup. The cross-reference table is one entry longer than the number of existing object: item zero is reserved and must not be used in any way. Many PyMuPDF classes have an *xref* attribute (which is zero for non-PDFs), and one can find out the total number of objects in a PDF via :meth:`Document.xrefLength` *- 1*. + +.. data:: resolution + + Images and :ref:`Pixmap` objects may contain resolution information provided as "dots per inch", dpi, in each direction (horizontal and vertical). When MuPDF reads an image form a file or from a PDF object, it will parse this information and put it in :attr:`Pixmap.xres`, :attr:`Pixmap.yres`, respectively. When it finds not meaningful information in the input (like non-positive values or values exceeding 4800), it will use "sane" defaults instead. The usual default value is 96, but it may also be 72 in some cases (e.g. 72 for JPX images). diff --git a/docs/identity.rst b/docs/identity.rst new file mode 100644 index 0000000..03d8d0e --- /dev/null +++ b/docs/identity.rst @@ -0,0 +1,16 @@ +.. _Identity: + +============ +Identity +============ + +Identity is a :ref:`Matrix` that performs no action -- to be used whenever the syntax requires a matrix, but no actual transformation should take place. It has the form *fitz.Matrix(1, 0, 0, 1, 0, 0)*. + +Identity is a constant, an "immutable" object. So, all of its matrix properties are read-only and its methods are disabled. + +If you need a **mutable** identity matrix as a starting point, use one of the following statements:: + + >>> m = fitz.Matrix(1, 0, 0, 1, 0, 0) # specify the values + >>> m = fitz.Matrix(1, 1) # use scaling by factor 1 + >>> m = fitz.Matrix(0) # use rotation by zero degrees + >>> m = fitz.Matrix(fitz.Identity) # make a copy of Identity diff --git a/docs/images/img-4up.png b/docs/images/img-4up.png new file mode 100644 index 0000000000000000000000000000000000000000..f526446e2936fa46439ff99f8f6f8167794005ae GIT binary patch literal 350259 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%0DUF;&;kL#s=Ed28)ln2$5n{544)0cx# ztl^p&u!CF1?iWXa*lOemPyNC|{&r+7f>53o9rFzU*I7(_@%|EFVQ>7+93cv1E)VW4 zUu0r?({YN}Z_v0%E|AD#y*gN^f9khd;n!(!i(XOxT37Mx1%)qyM8bY%TawUg)NX5t zdOi&@r-is^ly&T)9yA>#J;+$!RfQMT0ICzC>&DAl0+A`R-;O7))Y5fKYgsKwEnxP7J|xy0xy{ zWYh7fc*X<|vT3P+(8gR-CUM6h{R4UUnX(LldG;HI*Rk0ATmk7xpZdiYe)-DBylAQ_bj zl`mba`mZHrhM=(sT09y1vJ+sC?qrSmv%`n4^FF*z3_Q4pxvr$cR(u?!)IYgInxulh z9W$rkzCcW19#n6sd|mF_Whwu-mdMD@O9!dYP|-W&q9$%VQEc0&*NAV~IQvI^?w?yJ zqVH3S03hC1d2CXBI;s)BS<0Pe!YMivnAsJHqe0%7R$YPDrzfzb9coc*xR( z8x%HA7Y9<_?0d-$xbftLuS{IqQK(Bf)IyZ(Mkx<~XJZwPu~94{dE_jkEny3*aYH5| zVl^!U`UaWbm2mj>e%P}z)J`A}=%(ll?_(W5 zGo}Txmu+5;Z=v4?z*`LM=+R_ovWBOL<9?PoTpv!!SSL`pk*Gaj?h%bcAsieX2_hbmxjI2~ zUCrD$>SuTwaGIFJ^v_T0U8fFjYZS>%0PyoOmJZR1G!KW18OF38MCAkaMJ=oaaiLyX zp4b_C*UkxcT{km8_NAVp{2a5S_Es4w1PiYt*EJ~hcyA{D*|whi_jaR>WWQ?XfHMae zg!1~_aB`7oS&bjQBIFCM1SeAubJB5c$SxG@2`VpC4O4E~vGG|4mh6vd&8%z)7kWld zXUy{tGc`XU9 z`Gj8r{I{0TsG1dhKKICu^N;DRb^F2ml@psxQd@8cw!Yv6w|hv&~1U#_EDiB6vv55EaV6|5R`3kHmE5ibUZR(%%=t+U?{ulUS6aNW1D zyCQGj&XpX(T<5CH&O`Uj*c6zafWW!h@vX^`#_*tyRq*&D;<2g2n}z6MQxfbKNY;lQ z!sKnb@zXyiu!$+iCozcv6x8#=Iu4Hnke|IZ>^~G>u;intzyxKUZ3+(2!DeJEYKI++j<0lwwF1C!{@~gvso}&? zS3;v7C+vKMBr}8bbA;?2I}`t$ZvCX+I?%Nrt1BD+{Vbml=HE}saw0t?x4P?I6{jd5qWt+N-;ljm_3Hi*k&GK8Icn}V9duNvHMBoO4xT98lhER7r=cj)*&1fiDg???w{Gufhu=DKj>@U=_Yc7~sdBow9Y@rYR z<@=HAMiP;$T`j;6r_wcuR*YZQP-_1+L17Vf!@D0~IG}N$_6A7ZuRHn+^J)0jcecaO z?MInpgEl775m$|06rshtCnrb^a+PFn$&XZ=2KtKExS^uoA3n@p{ls(&Kn2iK*b);A z=0^DKQpm25Fc;B`A8p8jANk7!*(!)~E0Qy(f={0q6hoE}4WTgj5 z(l~$~zu*%Zz@y!bxyYf;L3H|FN&IduV|QxsI$~|0AzAg@cw1})okpKhZVkvi10?SH zUAeey{G@j{C^2bBRZX$vxiuI^I8bKD4c!UHO&kA1~(*UtRttVv`{b^xSbm+;1*P zvx&Q^<{vJ;$y(wUqI(I=$UaV1m?-D{JEQdqqChwb>O-KmVkcl>E}6nQ?)iRlvcwX- z{l!L6i^DE$ChCa}i}PGjndno}=vxc8H)wooRsn=8M$ZogDi z;P~j5z-xN?KnT(*Kh8VAccNP=gnL^F9xI{3CYa0M-$_P9cbx%8UYQqxE?fRbY~q~e zF<)32Ih{EMLb>jZoXk17fA6?>h1djJ`gx#_TSml?ZFd&;)b2LP_!B2;PCb)28o#_4 zMlJ$JHcWLQug>wqGdn+L`slGiu$SHANH!FS>t@b(^;=CcvN`8|qrcNVdKLUDRa zgJv)bivfkct=L*(l{GE2o1Wsf(->RI!}3uq$^+%>uTOC*skUn2(hqE1L2liY5gB{Wjvg9R ze8~6Ye5iaat|~eFb~E5o<4UX{dkli#eN+D*@Zj->gF0IP=Di{0W@d^e4I!R(AJ4q$ ztrzDUN!Q+o3kMmYBTWN*$r&tMT@WX_T!_dC#2Z{Q;AwqfdK! zNIA)ielF0wJ1lv$aScIYFIoAO9cH!wC9vGZF)jDbK?EqmGhZR}Px!=fU58BI7FA%JQ+@yKu}ZkJIom<}02d$xz; zrUdaDy2Y~Kq;C~73|B{&$KL7OPj*NdY5Uv?GaEtcf<;CHk#1;LUmJ zbWceO`%u#7**^xalJu@TUL~LG>%COEtd3;%UD(C8A8rE#aHK^RNwX^fZ_H;`ns61W z*Q-UE8#J_uV!bbm7es0CA+&;}r3H}mLC@tP9;S)k8<2nrX;l0fjfTMP;911vtSX2D zz8%`bL{)RuYW40oRKj%}ZeMj=oW$+AFyR@7(k;5?V6OXtTrz)UlPZ)#-`~}~`taJ3 z5eUdO%93p$?VSBQkihSa)d?u*s(wshReUZPORfv(e2f9o&ND9QP!t5e;^P26-=&U8 zLh9S@T6NM&J-mIHX?k-h_C{O)q?ZbUC|@&!ba}rlN?y zF{aH;s8g>TZmXRiPgy4eKb-YlYwZ^9G;>H}HCy(%AyM~^&Xt}%Tdp?iBUZV$IGoH;GmxY^A=K)DqBwtSZ=%0%6J4b_G zH?;lsnBb9IOl7NaPxUb0X}xN=DzXOcI3pThc-g(dj^EHZU6esv0!9cTAd*^l>8gimbO>f%RNY2^g8{4eh0i6F*0x8cB$VpfO4eJSJQ zQ@;(C08vg;xVqRE;&<$C3q_~bJ`z^Ty{(KX`V+I=p6Icm(GN!@Mr|`BrP?|FYAfuk zru@fdAH?GHHg@^U(@&8`o~Dr|_0q{9q+9kKc>M4^=M%8`@RVD$qHCtx~zc|G&m)ESbm$>Qp>Gb?-g z5qxiDEdEJB zH@*5LfA#mMuaCYT|6sM1y_nzwqw_SqqiC6e;zL^RoQB|7IW8v{y58t?I=U|l-bHy~ z0%l{OR_noK42mr)5rU$$tw&YYa>fntD+|1D(V?R7e@VVyfRbgqdK-@C#Lv@~%UVoc zBo@@~uNk9y@ALaVtsP&{{<9*K+3|y`)M>~-Y+t5O=a})v$?5niD0<&5oniN5`M<4* zi1*>18{U%L+uE3WSI4U&OpVob)PKpsPHXO8wJvLXz*w#UIYIIGuo z8+9x)fF;+()4H(#E`dbv;tnvHQjtt^6;Z?$I3V#fTkFc&bY-BJKU&8;uHpM>m+5{F z%b|y|^@Rx{9J>K&edr_H&ckcpD0WqRu-~pvp=(Z-eU^17CY88$(cNPVjvAWeSSncf zvt7LtfD0L1ZOF*G%JXf-9I>ARN(`Zu<`t?_uLmZrG?{B8cL&@r_|(CGM1{jD=9=$6 z6KpvY@fcogeko!SsF&3)p0!U}^oBVwTiCxWs$!N(_cELC=Oh4PmpP}(0-C|Y$aeO(<_gG!kdBb8R^U>HbOQ+#M>fuk}w=*K_O+x2iNgiGXKpbPw`llYiXU8Sl zXw7A$KIZw~$Ubvyz%acy?+k)Ne0nU5vNk zr-`9`GGL;iu&P64WOI%#N=O!My;=b_wE{})l_o#D_z#fnpu29FXsG_+lO+LfPPmy; z`4Mhx?2#%{hAm}OESo@oY#&M%XY5ZqEsRfzuW$ z9CZx*+YuzJBqYEC`Vb?dFo~a^{C;H9qfwDjW6M?%ITctC9}JH|Itg zBMTVZRMph2DUzwiSw&f-_BPWtZL`cYN7=;Yx=Q7w#gRFODP|q~!L)F+t~``AQL97O z5uYQcD6ux>F{L>`O4_N)YScl0o^RetM~{ zTuxude-1|z3aec;(M#3ls|Y7gSVNYy6cO7E#|CI`-l1~*n|gTOz;PT-$dDBxg#=s< zRXqK8nnb;xG2`_9!aVLueuL(_p(#{%=jmVt*g5;9${T2<_A6|**QM>{YPU#@ z3%CwV$U^v4yA$VrT}yXX_b51E*Ww(3!7am_fa8$*nP03U7;Y^@H$es&X1WJ`LKNvg z0V!<72Q?ZJvkfmg^lmGTy+z6~LhNLp5k<^9F3WylOY~?1j(d(ry|>)4f8&w88z$O+ z7)+hOe(#8f!OiE{F`AUi2r=_H66yW(^(~VrE$0NasyDUM(8R zyddQ5u-%rAlle*3&{O%VTSSXOy-cOCtoA!dR{mNvK3oFSfe#K+RmU(E5ns2v zZ1Pz=VJ%9(U&j>q`|fh?mDgy>3wg1b0n#VS`DilIJm;uB`+E|vlPgWpc40@pm*xt~ zjREF9w*W8NmH_HrUa^4OBM#@lf-`}4uv{0A{Ze6j1T=H0meuHygLCtq%8fsw!>#s_ zvX+3?W__EXH#+qKRDV2vLYI_`UE+B}t9qj>R+W5W?Bof1q=NPW{xH0FK}wBci<$IK zNswtTL>av{S!!4*geZDc)0`9v{+d-kwYSwag*G$}jO^q9NxtJ=Qd1E11c>2Nf2+!p zh910TcQ8(Ph+l4RZM$Dr?p+Y5mankX#Ux|AwhafDm9HuPP#%j_O^=~?^1Xpr7QL-e zXAltj>iRh1r!w}DJBnlnOJB}R%?oHjpUg3bwntA1mCD^Vyhb6I1I}ov`!&`xHY~j;n89k2gR-{Oi?^bzb<-bz1nj zAX2_`WirWmcNH(JxRxWtZ|Y*T@P-JYwF zy{qx?-I^<5YX^nxvy(yOvmyV|gOiiBuCG_Zau%6Zeup|fRyM0P)Fv_Gq^6XL`hZMA z#x#gj55ODn(yFQ_4dZlOIam-g>#@VG*KuOVK*s;4NLHf^@fs=M+6MV529g|3`1c`x z`6|%dade8y>caVOkgl?!1FYlX!rFQGrwY@>Ss~rr+HN>JQ}mtVy0sl|;H!nd_iRg7 zAO#-&leDuN!chV6StI!?&bm}EP!rl^Yknv(ATd7GlTq$l-63Ln_nJ5Xjye#vn#zrG zfJH}H@#lYrUFtHu&B*~*5{b8#5N{&uOhX?j6UZdj&!#9WT;CL)z$$D15Pt<44e?cm z2b>tBo9Q?yv>4X^Ce;PfOFzH*RP(+`6Ci;1gQi#grz6?f6@|!NU&~?D(%!Ow#b9?-yp{ z`Tfcp`C|Qpu|hcBXfK=qt{=i)fl zlJ~3fz>TJ}D;MDB#TZwScd610!PSiC0OD2HRox5Cz8;HAIpYo)m7#fvw`Rx;jY>x< zX~s$;NqS>^{MgIky3}0Vt#SE{wf5~-z*Wf7%myTkqd=6E&{SH@6R*I^N>CW8;TfGZC7>7W zhuewAjhHBkH)r*uZrwPc>EA4#y%5$#kqb&UBzH8zIjc<|(Lqh9+1AD$h5z!$q=S3C z!0phnk=sN5=#X`o>E~lq>VTuhLs+>}eHQ$x6Yzy3&RwhZB<5`HI;lzX?|4-fkM^_j*3SzG z=63>!iBZNCzr10Vb34jAO^p7D0m>z1rf;Ps_I(~(9Oip zUpCHihu1JZRprMmn5!HeNcWR!^GC`}<`nCnsgH$^jRR8junZI+(;to+@p(4ntcBNt zv}E$2{_)>4Xa^;`ku;(HRaVd^k$3$$vfNARBE$1EKI?_7$W&+_rSnIB${XDAL9NnS z%_pf)dC3&o#Q(}L>7tY47&AQFj#kQ^Z4d2Mdw!KTwWV^e02S$g6dd&1-`t$lIvBf= z?KS!;xWivpgZDki_WEr6wd#pG-6P3>H^Z{qBZur*XTk{xZViUqII928`l* zT_G=Hk^`%Kz2o&EFSj_d^?ReMO0@4Z`C;!OybYem$*nB&I4Kz?y!GYZ2vR#uyjxUg zQIioKEi+*-kYBzqZ4q)r<<~d*z>rWp*N{;5`9rH=I?IeF!ojV5dR-oHXrYlkG>eq5nCqm#q}|>aRxtx%EY{Rm4<{{@p*%Zg-L!iCW?7cTUcBeo)mY6l=Rmq7@F*w?S@Y zHrjjgVig(95~j@7ouAGxpKi^vIZsBq&+x?p{#1nwb4&-y1>W>ey>Lg?D}bYW%{+Z; zQ(Ae0|uHb3wyj;gOWZsTjLhNu%5-nU8X zQ&!rYtYF8T%_vyJP+VbuH7Mt(E!VsJlw0IMmH6Rf_pgY?N3JuX;ZD~g1a!w;k`N=< z=_;#tU9cP)qZ61hLb??wzS6JER)YMk<2}jWVeSRHR>1IH)B9E&?H<04mGxrNHUS1> zvj(@Gq*NL>+5o-0qu~nWpl7)>e{0HYM1Ori_7dRwHLOuN8pv8orW{I=k(0BxPw{)Z+fAI zHT8J4D1GYW57ilJ!4r2lw3wt~`C!N7X?Wvi{=#C1bJCFiB{Ie6x+(bFVEYGt&2pce z+@Y|~5j!$| zmvomj3{-L;9nv{QNDT&zy!W}z&v|{X`-lAld+a!NykGHrv->}kEg{AbIZ8|lrAr!; z*1B^exu;+D)V;w@g zF&<|(3F|#qAk2MF{r1jE_a}rGye}tEIGxO#hN;uv(Z6b{8>f5)tX0~O4R!uFaTo%b zJmbCTtoHiqoh2kX{J2@vSY(Pry~q4=9exxtoq+a|q8M9tJ6#dIK`0$1caw(ogkQ|e zt3}9QwaH~MM|ziyt3q^e$zXm7owMds`Wx5lfjENT7q`N58?e;I&D!V>C_gx-`@}Q^G7%iyLjri z?gC%rD>O}M+PKE1NEEd1007K0w@L!*q`4QW5qFQ$aYG45cG<3p%$7LM%{H;r8J4h~ z0qvsQ_PcX6`eE_|8EfO%;jwU2n?5%suY#&&ug#V7_hq}cl_$r2jDr!gxOt=Q{YBf* zUBw8Jhi;snqHgB);-mV(GM>J*;)QRo`N0x^#A?N$JClEIAUJqNZ!|X8>1Y>zShUsR zYDr{bz)fw@BPfesyu?;@Sw%{@BK9nz-U-!sa5o!BXFv%xOW72G(nw?Q;g?6Mk_%u9 zlHL5db}5f&?;9S|ujc3yayDnBT?7AT1I3B722ai6S~fbtYU0bZX8=i<$aw4wEPnA1+>;(k*B7==tb`E;zke=*~OM=BN;bb!4^=g`zo&2KLrd$r$} zNjZvc6;7@?bT`+W=9Q0%Y=D>~iM5Bc<_Pm0FHWIT_OS$Ncq&kF)lGN9cQW53UqjXuf8$sf*D_ecu4%UfX$x;HOcd zK4SJGUv|oGhz;6zbZXn>&|1?*9R^a=hP(f^BJRjyZsAix5bv2&*k|HJmD(U-4w$(~LXD~K%81syf0ABimQ z&sYjZGGJ${-(W}M7dVnEgKuwLM1greRP?kw4{GqBjKb1 zImS4p8UHQf(;*&rt!hS{mofcWDbKMvMUuC>_|1S#^;}aANEUOUb7{S-v-S5TVogJ5 zu>^#HAe)7bP#m5^kesY;re$Gc|GdBFW>Q71v(VcSZ9np_U?IF*ZhSq|6rJI#q=6!` z_Y`P$jm%UIMdO^@?rb`G>)gbTZ~LEGUB;oZr@Y*;XB9_fBTLc#N-dhtAhoa4-;C>42* zNHIf|fD&(#XfV%sOUyzFEopiDe#;3jlTIv?G<>vXMLYC(qS+!%cbvB66qz+1!SRp@ zf!Zopm4BN^Z`V;1P^%NOlU0Fa+l$V zte#BpH<{s>rx+0Q+!_sl==+e)6*N|dJq@^ht%}T zH8PUDNGP?LIrpBc#Ohgmme_QYMh7h*3VPFAgG>$YiNe{%pAzpu#Xsq`x5t@GJo&0yZv>2&7!LekEV_|z~F zrf`4j&`ZoJqW*!tZ^DB8C>YpPv9AZ|h{v z96I??`ZbMRlA+lebl=F>uZpoj_rDt5g)=IR&fubt>16081;7oy^hE{e$w+-L%W3MI z{pP*8!bWF%ae3f1vND)5ry3n}^Rn7jFi{+W# zZX}q;AE?>|o>qrt9&2BHU`_7hQU6OqsNBEd>@b`=uOS864y$7wU6~`-9HBAzjZ`dtEF5iI(=*xw#?`UAwv-floT; z)So_f;!%YZ^M$*$ywl=Dz(CUMQ+XJeXlc5mZU*j?6% zCrRN?a}20@qvo3mze>(>L6k$AfR5U=TT*ZTAy@s%qEeOh$16R92V8Cr3`D2~94}hN znX4LgT&c!~0En|y*2R`}&Eki}o{3<^I?)K8`ei0C8<=or`~e=x$-%OWZ^6xb?Vf}Y z*1&L+43ow61KFDSI4B8$5z{Hh;-UIT+2TKLeq9s8i~Jh1l`n} z3$ap-);rBNwnXi877&9NGY>qzsNWmYIB}{|iKv#864dum4-8N-WgIrq-1;YXG=)#` z;bl*&^)j~cI!AXkh84i}G4VpKw%wj{={8yOf3OEy^8aWv*ZKZ;Jb0OY!bG!^@@=}l z-0ut6Wm3#5;PFS)8{sk`LfIkJ5b`W#Bb4Xzee+EBeFGkwYk!9AAK=$(=RR*zl4(sT z!{l;)hDK1I`EQ(PB{+VPnUcDBmBs31@gN}fGQwZAl`DH35a1sh_+)$cJQ=c)7wd`U zW>Va~vI1@ybRra)oBVqq6g6?U_=l^xi8zb&@DWS?_w(cn?cx(faT(d)!X4<3Qvnd| zoiG!h1TA_28?3hEJR{H#3xfGo&K}Yf_xqd2w*V~3<9xcbkc997{1%#%yNbK?b$5HN zzsS;bWjC@`Hv@$G#*@j%{?p64lREBxf^ZD+R3O=7ul#)zhtLx+o=T50xwmX9!FL-% zp*i8Zu+yFt4WXdia&Ri%aDw=&U|G%NU-+!{k}+QUA0#&vK0ZK1_W^~%*d{;g8s|^_ z(QV1YcH4_N&PqoVhKMZD@hMhD_MH{w!1o(PYbPTA29=@ylFw>kqy3no6oZaDPcj== z;PY<2{+JyuHw9&nvtS5w3aXJOu<-W=nGqkn#d+*aQSz^pz6Ek`dRNVO7lhFK8b=4p z2DMpSbkaE6VtxnE3zUf9@w^=gj2kq#^4kmCI&xI&5g?sa_OY*SIjVf?ZCYHteD*gD zW!68>gYEN0r!5<#*2G@CYZ5z3!l@*}Eq-91rgwb-W9~x;$Eh#dEk zrbP!YQI3Xxaltvw!kQ~Hd0|7?mxXv@1jV~X(I!CCouuj?5t0en3$k2yUcAWmCrSzb z3G1H!mQ^w8m78*RUGpCn63AP9G+Gvzo5)H@yn_D#?@h}=$r4N!6XyZQxs-hn5eT6O z0}ue1CM9A&tvdwtr~qsUrofiN1SFqhX;mbd2@>G|8vrF1APtj)YsL{jTmw0Ev0o?W zd*2CS@dq;b#2Op3Qb|E~sh}sAzqH%~eB{jGy3{Qve3Egr61h6dCk^G&48?Mk4La09<`rFH) zaG(YJ)v7|W_N|$EZw_rNZJgTzCA7#HC^1L+ravO@&Kj`E%2`P*W%q9aRFGUU9M|wQetw|djyGrg+qjBLfbeMshx~M z{u9=blXn5?SPC0{&VQhSy*of+{1P0;P^R&}$NYcjCVF^Q*gpgJ!zio+KA0->6LeNHR*A9 zd(wd}NG-iquh}S;j^<&h;^2w$0p~?z%l8etFx))O82)m-I)L~Ij0Clym=3dTBocnL z&-CVlFx?JF8 znT8!973(wEpf34Q#ltZ#WNRdCKyv)o~;^yv%seqC&@jfsP!q_gRLA(ni_%B$OApgprJB2Pu58o0PZn>(kal zCcIuusf#n8U(p%Q6<}BCfJS@g#WT7<+fM1hn3XMQX~f1O&AUGFL8UVS-ibH)ojQ`r zH~UFfk5&HT>>P#?Y3|LN>DB+{y%a#qAeU}N0@vxUMb6F&t5@r9>#w0#n}OFpoh|%F zfvg&83-phg^{HGsJueGy_x#9@HS%t*=XN_#Y0Mo$2u7*mlx)3;yf<*3~BRu#(w}_?%Oc%Z-)c;ak5cqcV5nF0$=n# z+%LzPTC-1aQJ$?GCf~)78|mTiPftjL8&9h^ab=3PuxDqII{e!Jf&IH(>GxwY6_#J` zd`2evOjq+3A%tbD3z#OXk7AS6%cK)00-)jYj1X4FT#7fvW{0OoCjQ&@5QFWl&i#pm z#gtI@m5(LZox|WJwQu z|3TT@z&8mnMx;d393yIu(S`dCr8KFclpPOcbHVi7b{L)NiX3HifStF>`yWpo*n&n#ti@>l`?DK6 zP^rF=XKQ61#ov9E&pkC*@t@a z=YXQET;6C3eVf-OZ=kC@LCoZbA?>^=21?M^M7a+lSdU=uD?<9KD|llHjuy1U0jZZ( ziYL0$Y8#Dk49Z914(t_-Tb8yfyfCe9FoiH(+)Ao2(!_;RCct>9>)H0vThPwfFiBfx zzv1*_L}F#-eUL0|tojn#VsAsboD=z^O(1sBD0zg zYh-`%cv}2T%M}@8@I9so$L)Uzik7F&t2=+-0oh%WDE%@r$Ka@nJMO$e?z3{%?&)Hd zuQy#>Y2D3R$cFIAzXy-~3t{3nkSJAw3Xp#hurqmuw{kM3B9D_7`ipM`p=>F%eAy0qm56!Nq2+dy&)B#2 z!nbKX90|263gx$DwBYB)sz>)GKcW$RD(bgMO&7p%ZV9-GcK?wM10C^1k?Md`(a_Fs zFM}g|b<@ z%mdOg;o#n$?cZ}&U8T1b$T6q2g)ML-{&U+g8=sS`+83=+ISC)X*@-ML>WKUe zV>0{0OEhds9jtxm*p;a}_O3f|OTxp@Q$rG9?sJm*LZ&q`gSw-LKT>)ke-?e=}pnNa!aO*ePJ>EmABj-q5>JW9vU)HhrBwy zsn;)(Ojal!o3NA>cbN*Z;_jOhy)CPHj#IC;v0pPAgVyp*)~jb9P*pEJqHQ`zIzAsj zI=N@X=Pe#`jamP#$b8-G-nB(`j!At1p79tNApNG#ZCN}fIF8xjjqrfX2~D|Ndr3{p z{WsG8W2x3_Px9<1xPG2Cs1S@&OyA-UML$2a5T~dqJ;i=p`>N=YKR7V)D3)J;8l;et z&oSZsQ5%O@q%j?Bt=_Ubae_TCReN-{9X=g?Zq#NNEKHP(cM@BFn3NNf;rWy7VWH&q z_Y?QCffD*?!Z0oAv#nGd)z@R=^rvs}*20>S;*5>j2PdS_%?VVNVbN@MDkI+=uiz_O zL%p>GR5v}bAE$fcrS=R@GiCbmFsT@a3ohg|*w4ua9dKs&oP$XaibqvVh5N=6kACIf zZ)v?ptI=NAq%f|v@Wr;%`@JRggd7YIp+Rlf$=X_V{b`ZXE*3py1_Xs1RyGvHdT;ye z4^n|8L5V?F_XF&z5gEO0m(VMOO&)|3$(qp0oPeH8K5|upW0XR9pbvOHEfWI+>qb(Q z66##Ce&7@Lej_ABzhC~@c0RZ&WB=CZ8Jg7k<1kaSjF77Z`P;P(6I4}U{fMOCoLK;b zVflNP<3uaulLS-F>)JZ=)g*wE<61>wCzz=? zTgq?K4P{OK)PA;7PW zw+5=RtobOd>pPn4=3V(-Zv&ar8)v}$ZGY<)f{?p`DU&o8pWE$U+HWAqICY5X+?o$a z(`c{$3sSsd0lejPg-Mv7pDNM45o>}JKWw!%%?!lq(xtYx_vN1Nr_sKS!5uMZPM+J1 z?&ACYPYq+<7vrMap9bHbukC)@8x6-@9-UjFzPPD(V?xm4__xmR*JQ41HipY?@8M=< zW9ck!Yt)vYliStGf=d44sFK@<G3c$ypGH3-&we5T?VE$lz(6t;YhZG~_N7d8gv1FVS%tPi<)CM5 zV(t7OGt*jpyS<3(cdFjh3%}1RXpp|Q~}h@XhLty1M!LMRlqI> zN}>36H zZcgb?HqTTuVk@u129z2Z$GD{&X1#r`&f{qydIsd*k81C8!^&`sdHXON`+D*EaDB}0 zl>GT_E5oeJ(MpJthKaX|qmCm>Agw-$qD6I=7jEH z-a7EvqbCl(&~6DgY#=Be^sr#Yh-u8SB|Mi0A)noqOFRxC;)Dq8d4>2K3eJ=aK&p8d%*)xGn`ourIlX8 z^8u(@ckKI!tZ)(TLKKfC`9{^}S9nUiyJ9enK6H^PnBU=&LqGcdz9;(@-E-9BtOzgw z?vrHa?W@ReA$b6a(i=uCCJ6(No(99VmkvJZPX0qC$C0H;ODRe5zIH?xPXJ{IvQh*M zsdLu|qc*l$IKXt^2iUr~=h8_pB}Ysji@@=)!8tx~-j)L+ zNlb8)_@qeB*-y8T!SX9N4Raz#tP~j9ZeidS?oz?Iyb7xXzutUUmqyzDXR=tB8)H64 zwerer&yqq=CfS#tM(g6scUktM-j@;p`&CA9`cE$PTgv0Pijh4WBMF(xo3rQZUA49_j8FXCOptT9j^&^ z@w!aJY#oWbE`|&qWxZC5*%sN0d|vJxts-$ckgUz{TK)GC@sQa)HSx3Gfa$`liw~qM zFzpF`{5qrt>baohLb{q8H0B5Ps;rxKYoc|z zb7XLe&;xCbIVHH4&bck0xg=75uG=?FDA8lv<1w4mAMu~gq!)g``boE?@VIP;;`<|l zscI}oTfK;Hf34csvK$1_J5*LU0B^wXBZZb#LNGOM2Zv+Dd!w+GO5>*CAf;~wI-`bS zqD{HSNR!|?tHU08gLOEH26WR-@Jwp}ZfpGAz@$WyR5^l>RM8H>lud#TOMhV(A2Xh` z+++OqLc2=f`s3jH*NW(nEZr}|pa=NcNg)DI-pCicuH^>G=bzMRNSzhQ$_Eb+i9QX$<|2Rg z`Y$wo=i&O%?p$^brKhdJfq54*TTMf<6CMJolHWUCKo5(g4P-lh72+Tc*QO`}%sagL zb1;<)U#UFA>}Q^KxViCi2rc)BN~U|K=HBteNbFIy>EO9@m|3J^-p^qA26Xa^XocQ6 zKTN4!@|sk_|H&Y^crv2i^eu4(7CH8GjlsNx> zbvGY0$q()h^@jFQ$CghW-VVUvZtiM zeTGeczm|up_uteOExGo&APqNAJUl54n}&DCA1tv=#^`*q*;#GM-b%k^j|cPu?H=5vHmNXF5$yxV^vZd5&(j zM41{AzXPt{G02TD2p+GljPmdHaCX{Rkn+7>w{-lnvceQV4+FJ-mh-_A1!#7W%aR-t z0Ps?|bEz~VhkuE+fH0r@PSh^$)kHc*pX19YGv~zI?u&e9mxT$f(B4>~S*V#`2SQiM z{ShBi_*|#$duqi^$-3Amu2nnw!KjS!*gaY342RnkzBH^^yL0D_#Df|oGf(M}MIHU< z4Si<}yLueMvg1JFTGw-BQ|fW`uBQTm(TA#a#4bk_gqgH(vFgeV@m@rPt!yQsA~#>+d_$3k`z0d zi!%|RE>>dfVLZhxuCp5`nqqhbAP95{Q%i7ezhKJ%C31F}a#hwaZl z>Kqf!n;T{K$*uGUtU7_NUnZCTH_U{iKF>JLQ{^YSgp18A->b)cB)k_INAQSiUg{T8 z8G9R5Q(ylHxM*sYCYeatj*SFwHG7(hC)-5Q7vw*t#^W6QZFp(pklP(&-2o{8c}^p| zB1eh0fAP9)DRsqv%b2J?WKQvfvHMo}?Iw`T6bRYYer__e4cl^_ZXKVkl=FrZL=5&t z1Cig&*f^SayY5ZPT74^TwdspMC;SLC!p19!P4?u)3N=9LFA8Pq+KZ{m9rSLqxp)lw zSLlN<+)*ei-I<-tTEbwev&zbbD4Qw<2Z)+eZ<7GF(zM{$OsgSdMbTs&%1d1`4WZmO z<9zYuCVn2=qr#wP{Y4HWwKn1`dX#32ZQxE?{bqxewExIvEyI!RAPcl;8`6f>LH&^klP z1bL}ad^>w=A_WI{FHaS^!VVt~17}l|EOjRlXYc5@7+M3nCW9~Hn|u%dx>n+)vY^4% zhZ_Te5R>3&vc}EQ>W0!_Zp$3A4)kfhjPSpnKTOUhC&25J(CU-bBC3bzq1THazC-|_ zqm&nf6+~fpmQitXy`rSD2~4{x{vQVk9mhKjmC{d6jKSno9ex*W;rcSdhIN@QR!P`` zt{;aDEyuYbzK*JNKb*2bTC1)PD92~Q+-J797Huvu4?Hl%^tA(&+kVn zg5L`OiXs(nzDcrXyl5msE9k<6{=whr5KYqE>TlkGmv{Hg3_86OKhr*`LqE|zC{(|P z-54RxJpG}vNR!Jg;h=G>m@G38d#r-lvA%M|XHIX?37k{tJp4A34Dj6hJVbs0JB?#X zGjO;6Rfp6zjwJ>kXVsOn?v*?C%)NaKbzwe^1Tmtg6o-EMXtE#bSAE-BRUE@R8O-5T zC>^E!-U4E>nqsmC$}`y|s^r|)Fdr}epEXGT>^rdlP{ZE+IDIhg7KlF*gmPsDtT*j< zK9KD@=+E!>WKMfb5=zx%COX}fMT9JEIqM{}D*u0l@agoE(gI5~%Z7-F8YIwq2XEZN0UL&Osw% z*O)3rB9te?h4^)b`W;D@lvoD0VpuUBY=ecEGDKCu8+|X<1(#)-&Yw=3zCK^$%3{q* z9Og1ddgfqaUWACW93|wOAQYW33D@RqrW2UF`%CC2)mKw$h7s%XsN`ad5M2dv0him9 zM^(fF;<)0;HXFp6!A@KE1Zbi7*BS>-LKk7w*iIVJ8~Q{T#$zstTU*o+=W%9`IH1pP zw@VVs6)Jm*t~Hg!Y_weN3^V<00JRk8A0SrNzdJ~-P(=59``yyYv-bqi1>q`@nu1!08z z5kPdjKH5r`6C_LMs_@7i`i_CWlxG-|l;q*Dk_aXrO!(Vng!zEel7xh&9y5E-#x~YS>ThRuSAYmEs2@Q!nn=dh}@^MhHX@HvV+(GsYg#%9|o+zfVK8WgwL}mZxkR| z&dkRLq+&U#Pq9whZ(zp0DT>9vJtW*Hae=QRBC3)BB39%4bD_wh*6E_2xqhJt&44>4 zMb$O0rYJ7dXUi&XFwfnFbbNMM=g7^GUHYAJ4dxA#3}$m`8FhcBhzXAlbz*qEoH$a5 zvm1Q}e+5|c*J6XHGJXoa({b_WMknoM%J0FHO99alENoD#1Tn zqIw;hQ8!tgzub-8gV|i8I_-|dvqN(HE_)XBgFt^%I8d01$(^->sEkhn)JqNjH}<;= z7H7X6!OISO(?ob5`kK~lPpl&`aOc+})4otq-+NNMVip7d*_phA(aLRB>GXkLePXSu zd5)zU>rP+6eA3e57h6gq*0#(PS+UOjF81LEmYI;O98KzuM0o$Va7+Ry?F7suwVfbM zDQF?<$-jd5nwSHs^$ZfXPv$7(Yh^R-FtDiY2G*U+?%Fa8#P|CGMc?oJ=&Q-0#MW%H z@-9+?eKC3aMBix3B+x6ROOu_gS}|6h>cxdT=et^(FW8 ze3&7y&Q?CAz=nLt&xz7V1P>GD!=9CCZdRf`J>=zqx4N`=t?%Hp-db_9XAnlI_(Q3# zr|$Joz*&Fs{?~>Cryw#V$q9~05L{LTOU?Q~wybqj8nMzJlYCPlc@ghmH)vEL{hy~I zNtRAr;d`xF#-mH-B!kPT*4Qul&tp{q5kH(_lX~X!V%770QIF?Aysj3!mni9cFgY#7 zd2!K;quq2ge#G#8WtG<8f|nh?j{A zS>)~$eTv?}{_mmh%?#IE7UA%DNf*q{0yYR(7?hI{TxFFFbt9!b8X~PXxMaB=8GI-s zsp`M>5*3GA=L8m&eFh~(|HOyMQk;>zdC3TtAmEH&%4CBNn3)0i*0lr2A5h9muR){D zf#Vb@L$tlYw2=dI51&&YX1L8+_SJAM*#?sEpm1aGOSmb6c)VH%t+qK_^LYcczAq*% zNIiC3hopa`LRi8`)qg7PN+pZcowG9~qFR5gJYo)7;m|A1p$!avHK?XV)VcNE>zv-6ShGr~#^7h}10IvPnV_$}&z8qC~Tz1Rk{E=RA zwQp*+*ceZR4(?x_2?rI{FOugz^ZL#A+(C!Ir`9E|(|gr?A4oKi}Q*{QUq%DVg{b$b;(z_{;xp##WJ;4K-tjGnoKi z*4@>+{nU&T89r-tZVx}*-Arvcs-idX7*c0!2dFZ6_g3-ms~6ZjmTX zOWtoG!a-f5F0F7<^!rHjHnGLUu?{braJTb#ewv{W{b;*xR*I#^z@6e zN*A4HjjP%$=g7US3_ldLo2Jx>drxi#=rDTdz^zPT5u=c+%+&AB#+zb1J-=LbzRV{$ zmIgE}rW_=M(qCjwi}!@ZK?1clCSTC=OX}#b_<-d?uX6uQ6VC;MDUpj6!_Ww2nnB;C z615bS#wu-is6R5nTav9qWx@QZ*nl!o-J1ly{P_L1K^?r=sC|hh=OF1M&}yaQ1|{M` zmtMS}eL;uGkXFUL=Fn{zt(aX=e3(ppLu?c?!(n%nl+x<1c9vjvJ<6(*CGnHwYsH$l zvf?c-c3mG)mbKM8p6pINu7}q2_Td8EROBl!4h{-_*O*RZZ!%N{yIc+M!2Qs;GTYOY z;s8=6H}gL{GJzL&=@8JkvzBfRvBU1R#(;{KndJ@w>&U=;S}rNG5E;Y&E@$ET3zw5$ z86O73&sn(wUZ1bJgxOYzE~VBH?}YqjN}CAEz>>p|`;Qkk zSb4Nt)?PO9?Hp>;&^&w;>c}gJmV3b$36R?XmMQT^6*HbEa+B6*i|nZRlQOs~qe>R` zjY|wgOYz;vXzC0LR@p%K@>yj;?NXN5Jj>i7wTusGhA}n#C8jlof99hV7_o*YJV7s= zW30KeZe+7=d)~BO*nuG067>H(%X^3KhRR1d<;YlFSn_({wod#xUv?P51K z68b$y`cY9TufZ`voffiJn3VM1B-RhF=2;*?zjwu*y-4c6>2}6pN4#zli6eow0K%*5 zDushpEXe)lwfDREeL4dJ|2~c5tf2IO(#E&ZRe+x{zW ziJ<9(-WJIb=c(tu8pfGf<>uqH-s%%<19?LLCMZM+dy)nhy|u1ZN(sce1Te%$qQ38^ z4lWm{EDtqJl-Ri$#*=pCXGVBQCLTXY=){`NwP@V1F2lsiwHKqp*t{k0=O-`6-kSXR zFxq@&^U^6_^7=z%m|lS5h77Y;&I=j*&-Ee)!y^v6zl3&K_q^Qt%vx@)KGyiH&AyvV z6fIY1OO2oNx3yoUQWqDx#c0l(EqS<}DB*Y(DAQT7CYxPge*Vm4NDKcp@&Nrd5JK$f zdE)&uk94}XG^J5Fz(T>knhqQDd1ntXslQQ4!M{Js^P0C!8sBxorIj`K1A2<~%5=1) zl_3qW5B^dtY?rpHh`my(=_`P?NH^ST!BFR#bNT%rgM7M`*RjH_5(&V!-m{k4UU-xo zk|>np;8wX>A>Tt~ux@Z*Xly*FWW1IHa-9A?JsW}!?cAFer2P4)caAn}ZJiY#pXSBv z6ON-=iatep_d3t_cKC-iU%pQ#5y9R|@j4xWLWpNSQs2?cTbNbmtQ3prp`@$O0dk|! zZVz+Znat~I8C!*sBTxE`Xv02a@!WpmsyY35cjdq&fS!c#ySfevgMEH{K&49FhQ9k!9bI7c)E|yw;FLya`mC)~Nwv!e|{D z7Y?)~_khIjek)L1N7BztD!OAd)Fu1bDMrix#ooP@r%Jc<$c_10oAjC$VCNXIYSZmS zf)Ap!j3A^O@Vc`S!zcU5$Y`6t<77OuH~B8%17eNj2m7W0n5h;#;Jfo3+$Ib+fb{t` zpfTZ3d>&O;D91CkKHSEV2oD<;bF5%)d(hQ76Dk^5!BRauFwi{gG)TlKUh=~_@9smv z!weCZY+~-vwMP*{R&h(yY{)67qu4mtWXky)e7vxYYL5iNMc1Vz++{(g2TVG*`H|9& zP-o9gs{}U=#*yYeeZ$JX%(JsVL;d0N+$(%1YT#U|*h{Pm11V<2VO`YTd%bBg z&39&55}enl&d?)bm@e6nrMV_50y<)`S}RAs`;=_XH{!luXu_`Sk=}fsK*;GhPObmw zD2o;BdR@W7?WSV(N!lS2-&bV`Z(Jiy&2KjSs^d?ATaE%Xn))YnRX+pH@>#!i0((-gwoharqa24aNJl_qFr$6uOj@L#>O{1?Pq0@CDb z-TNq7i;6rStZs}fFXB+}MQK*TUw5652ehhZ}Q)FM7W2W*LEDW@C^WD0Am=V?C1LQra{^1e=Y=TWDE`w3=UY1>r+yi`>r=8J)sEFuvMPW? z{}|2(BwGC7*v@mjFW~&)W_KyKrF?zpEzQcf z7@tJ%*$7;ee^>h19C=3KZb-w-07~Sy>{oHTI-EPbc@*rCv2pxQ{)m4k77@P_N;pof zR3(hx*R90$n=7SJ)jA^?ST~X0h+zIrsP7$BZwv|JA&v@XGWAy=%WM*#d7cY$ohdu$ zHv!9tRx2Tj6{<3Le96NLy>EE&LsPt&647ayK)7S+cRTMuirgpq)m#w*7Q|hpm82L! zoQp+A_8xhfFe!|ds8^V8E|5PUQ^&DLKx6bt%;hx9zj*zvo4Kl@G#&fJXot$hq{QtwB$-nUF1y z{Z-bg7d_*O@Ms10ZKQ&_K$w2lQ@4J0wXw@X2uLhGFS!Eq)e*pMr;`38#SfhuF-Yv< zmZNl5NZrkY-7AlH(3EKCYiFiv&i6{OL60936)K+8dDXv(qZgzgH57fN#R|uS_Y;%? z!gm9?K+-;C`e$+Z4a!vsp8Sl005xJ<2CdL1Okiz4|7Ql@8nuhzI+8_hOw>OgY`47))P?%hxRaNh6~+u z;DBzwg56mm`ScpkazlgNAMo7DP2+}MWS!6x@BBgeQ%O=$qKzMY=0GQkM?0pd*2=`M*9t6-f5&@>E~eqkM?G%_Bfqq;f5UaHOKIYBpALn03{#_RlmuK2$(>Y3HE`;b*)dk}J(^c{6D%eRlJ7@dB~Fl)Kkd z&7U=v+Om2hUu-@;zK259C-}omBvnt%V8{{QHPAB-HacwDPaV@}6^M~PAhq};zzWoc zov6Pl9rAx)8YSahtTU^A*EHwXTiJ3&>3Q#8@_rOC@axvktpEq^KoYL ztnbZ#;^&%7xodu9gYA#krv8C?UvDNIeLZN50-K1jU+}`8e{gA)2$sODkJ6^O2C&S- z9qG!CH5xdK`GC>v=H3n@^T&E+cO9CnTz^hiv{u@ABb^M!XXQ3$3%dIng^j0S&t%!{ zj;C8ZosE}2<7P;|&83^+`Gc4qZ^=5BL8Hcp%5`%z?0nKzl`dRw@#tUzmU>H>R2s^ZDcuUb`UP~nYZ*8S68-vdR72w+N`wN!1o0>Ct913RJ4D->kxEI1{!gS zd#ewiheRxYf9w*2OE;^wHx`H*qrF~WM1+wpq~?t@tP@41VwIYRtrD|inxRP=s|+tH z_vz$@^mwx(5jMueOMc%0Vd1cX3uq!eFgfeR z&5#+c<+l{ZcT{Aa#;mjk&hq@f7*Zj=@xf@+RuUQgR!lS=!+=LCr_^t$-50Pszlblm zVPVms#Ie7`d(x{8xug>+h=F%Qn%!&Id2T`~KAuZM5{n_!qJ{;CZT&czu9HsuU`;Z8)!$0#f)lDMWX-*u zu9=y7K|L<_y=fJihGq_=?FbK#R#vnCcaQl^@!G zSMhZ+whj*>u9z!{t<$qfKMc;cT=w12u%;0yVOAEhQ8r)d{5D#DQF~xO$CRVq9IGSzq3C_Up&EqX8OmXj&qFLc8}+~T!S z0&bRu!fU4qZg~`@xuKU%38<48%G3lrli#aY3#3t&kP{{rl6`Z({2eDX&+?sG z_BZeQ(qmSeiZ?~u!@wgY;%1EL$!D}+u^*rbgn$1t*%dnl)g;+Q{pn79$hHKe&x=)= zG0?3E<&81?Ki8I{bDXe#oXGM^nmW4u8{?*33Y+qHxZ>dpRZxg9v8))HcPmCw71T+o z!<(**Wz;^KmPl)X&I-BhWwDQL&WQpUy4VVg`xAV7Lv*Wa(r}S!BSX%deH#LFT%p&j z4cgw#QI7RO;)L==F1huoQ9CUEe9$8^kLZv=iWL%gLF<>!NWd8Rkf$S|5&Vr~{IGtV zjd%(Dudn?yED}!hxq7jtX78n(pCbA67w>}%6dwzUb3Ziuwk_PVo0_0c>PwZMj#EkG zd_Emo+Mm~wj}!=Yw@Vp?!n$kk>|GI6Jqk)zyqiu?mU8&ljbh_j6lI}twfJtHQY`$a z_*>O@99=F2+xrG)M@@&<)7g6KzSqCDJT7SJVBGDFYr60C<4=Cgt&EK<*wmQK9WT=n zl88G;DBI}#^&2OeIkJysf-d zn-36h&65I?=$jt}h_TU|5ZTe7ed%U^p4Ktr#aWLdD9rAEd3 z$$UP#S(IM%{(966cMQ&6y@F#$>M?rpjtFd-IZZqwss0f+XUg8A^07M4RR(vzb)J<( zlmb)K@;y0Loa`h-!_a03=6evupQ%T)QB;cq$^AEHpe(Fx69E2?{3B3;_11qNvJ%Z) zQ8H#b5k~2=_s>s%&ATnW_B#LM^cxeJs#G+;-pfYA(ji-fO`!4k-1L}4DAFt#qLK4+x}*Yn$u`u8sW_Tg z_UeW22J;RnMiG|3-CLPJ;B8f{zI9`bD$Gc-lhn2>%-g$kUJ}<@IsouG z@`0U46vrFA^)7_U;06HHe}PgPqvV3cp*RQ(Jv@9ermBfwOFgs$@j>m6vPZuDgvZoi z)R%r|#(Y-PWGX3i3add3N+lld& zIyHF;oP+Ek=Bv0yFAlA`fu1mE!i_L243($7pZmIW?%$tf69&RB`dWs448O3k&^vDX ztD6}rnL11oyowJT`rrM5Mg(T>d45pv;@#j%UA9ocddTwfFMH0=1EvT0)w} z!2<2wcG(!1$ykILq1epKUcP?3FX;uNQJB7UH4AU`Qhki2$^B@_{L8F05y9|Y4O)zx_K)vb99#OQQ3X4k`||SQ2RQKa`xzau zQ)ulIt5bo6-_jN65V{a`kgE`Bt;<@MIqEBOVq3`Go#p_VC2XVYQ_MJOQ$tOZPt~eu zO!S0)EQBqGnSFFw-T<~w^DEKcCG^jY?z5j8hW>7B|J-nNXmw5k(4loRONmPMnf3VA z%``=vsL~ck1<5VhUdiiq+Wc03?OMgb$?w9ipB3PXzr5#`{;Y0SA2?2K%`I z3m>&}w5)8c;o(%*RHxw)tF0k63vjT28<3wuCvT}}owXKdS+^!G|3%0=^+2}7=5z~7 zCUz)4A1$Y>Cii*1dw~)--yb~cRK3kzsFL~CZ6jZJDNYM2M)>(vl4g}PtC(h_(*Ewu zRGFMLL)ZlmEJ0d=#@drjT%ns>6H4}4&xEoAE#YrFcvgTcVFQowDSu~dd*;r>fw_cl z)e=?Mypt&h*$V?WFT8&}xvmcuZ+z&<@<`&l_j)q)Ufq`X-GPD3czG?ykq21HPne3U z3omw(ieU+?gYO02nN0i{J`OvS z9VIpT7UWQ_B=$Yl=N#*`VY~@0D#j+v{(n_ec3FDpo5p$3#1pEm4-o zlzk5IRIIk;U#p)>D)TP=8+26#eSTCiN<1m{1(!ZM?^Nvr2IN54Ff@@?SBT@z;kKc$1`^7yTIQ4?Qc zF+b+#*bDkRg!`YxMf9hTk)vly(0g3|(slS?`W`4=DdAUe`xScmTlm6Ldc}L^JTmf! zd$}hB*{ovLFR48^oQs2&al%VQH-S$PJ9{3KEEKaWrJ+dHa~p17Wj3=g__M(~ zeM3)Xpm`x%Uqk+!$xpclhl2$my?2C_BoJo;GH2nfm*!@+<9?829i)XiG zg!wZYGOBiTEN3D*t2p~51lG1&74$ADW-7>rF4-hoBGe*`B%5z`^pn0))oTv!-7B+W9M zBpyWk^*}1h5%HVJ_2aDExq3=g*DCb#2V!D{HL2EOX+S0jFGL%?ARIiD&y3ta6y$TEBp)Z&}K zU8blXO6H*<|2!M~d)v1cX*>d|tFJKbhj90!G>YkZ^F@wR6bkn%KRzIJDUdR}G9gE9 zEr0cUCH2fmf39!zH!v8PjPqm}w$CQ+FVd>F3mZE5mFC-RXmHUNFo(*gF@NTpFl$1d z_&?*$XxLD(aG+giFDvh^I2`%#3coyVEQWv2b5QFOD$B?3YLPLRn0;(h;4*o)NU=6s z2hg-1C(*u`z6srJrgAy@lI(3DiEJqh4^*&;&(xunJmD!J`w>;AnZemE`X zleJg3)Gfz?8^t2V4aMSkQk_oY0hmpHF50;1PTkzcTY(zoE-UP9zEJALJTm3R9mr{74`Rzt7-{0uP zb;#b@{oz0YVNJr`;7}9Sbi~eNaY`2ztw5tP^8uRUmCQBV@(gP~g0M=PD1fGs2~^VC z;etzf1;UsBW{HT3Opmva^)Y?SZ}6E@%dQnD3=dn*b=$PWbD*@yOBDgt`2P|(^Uw4* zgdYHemE)L%O|7ZsGtts>)Cqu>LQH^HaMtJ^VF5T5MR=&r5-)v`)svqxVwDAI@qAOP)$-TgMX+|<07(PH05M%L0n8Sjy2p1YU4MaIQpG-i zIq!9ba4b`=0s^mD(?Nx`_70epSAYm$rO>-P;NiFDoodv$+@XlpdenBJq#?F9v7A;>kfJ8i11^wxc0v6Z|H`8y_Fk$dG1r|NR*=9*7~?;h zaVVzyo2zW5HPQw8Ml2Isivhg0QV)ELBDDURIg{awYUFZ|2b9V4Wb({+KM=RzPOSJ~ zqqu+$FYRVha)Q)eS94yp1F{}!xwACSjGDuwXUrV?II_3Lie;{LEVX7`d=u0NNL^wW z`ol7zMGW&kq8n0*^}E!*A53>p=zE^=BXiwj`gJDG4UVzhndsRYaha7eqFBAUp1SI_ z%Ro|Y-#;I!$mfx3JbL8es|)xSd%RE&__0l&_xY6gEpRi#7>4DkI;3mM*f^8%>z;^l z)=PugT_~SSxj>!*pAyc1gMeTFi%|S5l3NXPM+Broe(OF2%r+!1Z9&_lsanLr=fNEM zFo+V)Vp;YyU;W8#m<;cwxyKBNMnE@vphsaXkh~)|M*K23!m5L!U*3@Nkxl zWTLC0&t}H80zkspl?!!N<K|}CXH7ii%dYU3C$@!6U)uwGDHwn+2ZJP3Y`3$V)mtB5Lb;jF2cp6` zj_cg6Zcto)J*{*)qHc5WM*+Jtkyt^9`fyHXX>)R(~!Y^hnW9sRgRy5uep5g$9n|G9t|WpW_|${X?_{=*d8-j# z@AsB2Kr-Jm1>Enm^yijsr^1X;cZOWK_FK{}2UkPDGxK_H*kgwYNm+Wf!`KH`Hy$cu@LXB$s5-wxMZgs#a5lofu_4u$dX zy|}ocmJE_qoMUISIE@O8ZvFE7lq)#L0w3h&H31v0h9VnspfL?O`gr^KVzacF{T~F~ zQ6{(j{N$ec!RC8yzTGFdDRL`2hP0rH1A))=S~k*MqTA1tje1JZ=h2gC#H%@Gqh@7T zx+Z-L1KRoXd!<9JtN-+LYRrnvIMxrD{HVX2?y$O2e*|J1f3dqhfaeEy#dhWSW|T0{ z@&y065wp+Bu1z_b_1YK-S(gOlca1{D76jXX&N>*;wwCbm=ZFP0GEqZ@%UYkyO#0e; zg&)ji^ zJBaA|0jMovYKCR(kAMklExTm(JwUViyX_6!LR0E{EzGxs7s&5woZSU&@ z0Tx7WT31SAZ<#_OUIzlK!@53dq(6FgNOPH_L!u}+l&CJzVB$X*#oUU0GfZdA9r(;p zfF|d^s^cdC07iIe$9pK-O902vP6j2-A*FJ#B%bQ!cZ#PCcEc44fTj(@bki+L;NCAr zB?v&O`ziJ1ie?c!BlP(xupm;{55QO}qw~y?0L(cQhgV8UO0kMtANnXhVOzN67v=Zn z6J%vErOKAhJ`}z{od0+)7&^gPsV=|bXukE5G$n7P8D{~$B(y#XH*tuCY2acnFbVar z!SAt@7k+9PTMhF0HL9}`I)-3_575^ZtL-21s)>T2`9Yb(372u8C1&G**pAb))G58z zM^QxK^p%F*y+35DJTVvWJVayPuxFYoD{q%T$ZD%obx`u)5>pK|6EYl+aZfrK;Gl!V z&3iZmg%g=vIeM)%*^yL3V^W90M+H%H$(EVQzMB(79?Q=akUp%b(qZ-!fAXITYxoCq zRtHE_Q3A^|*KQ|qIv>n*z6)1ji2b4x?QBDdB{NgsJbQ@P^x&LhaQ&Cky7 zN}Y^H0TyRdQHi%0K3@ppj1{kIsJ5jU_g9wV_?w>Gr*FwGc6sHQ1<;{@kI}fQ1Cjt{ z1UU@;$6RIK$u0yDRZO0zLhLpxlGGgP6!aRMPHJo_e}~?ma$)jw9;hMxMLle-syo1&iNTd|?d5cb0Cy|&R{_aitGhgFhQM@2{n zNq@*0vQ>XX{vb*j^#Y+)?O7ts!+klnAPVNYxN_o04oK+DR1CUj26|1*^8Y6tSKnXt z;=y@uEo(E8vnDYnQhL|9Yc>o{$NBAzp` ztfXc3<_CQV#ArmFv(C(MdgEgk73-CJ(W!n_OPd3uXVCo7qV>i=z>QQqTM{tdLcXfJtlj%GaTX?3+&=C1tM!GZ6ESQVECGWve{=qdXinA*H0Xw9ots$!!`v zIqf4)fCfI!DIl{7&Wxb@Z%>KCRaU$BNH{y?7P*qM=3;+jOO623qw}^W($J}cQ9=|#rRw; z+Q_IaUzzx)X=yqf!8r8iV_(h>#oO@BKtZ6RkS`T?Mw4spB;#1v=KgFeW{EGP75RSj zj+^@4Ea{i3fWc1oO{oL5ASZ(QX3L(SwVTPbCfg;38xwU6$b77c7B&Q^dHbKb7r7s1 z(6eGpuE>^fIPNAkY}D2oH5wJkk8<&Ta5fuX4XMEHj2|ogRCvMxPEl_$ec;ysUS@3X zH5&;#cz5Yx0SouK<3Ud@gNz1O-Na{gOJ4M^+}_YxGIreYgagTK9@YtvpfA9-2KDiIQ7=p=C;y&rwln! z$fo|bM|M(w>xef|*J@+=zYP?!YR(=gHhJDHI&^X$Kt<4yB@>AJzS8R~c!Xv027&TQ zMh<9ajzY;Bf17r7yT>l6Bas6W5CD)K0IC}=;#o6D5XkzPY;O#9izCE!iqef~fN+4) z{w0`9|AeFp7VtoMFfw%m(U9m4EXq?NV^5}H#>UkoPbPQl%`6Wxo>jM(#*4NH4LVHS zak05XosO#Yny)V0KA~tXvOu=9>Za~pr`of6M8iP|v2cA|KRcL==SU+Zlb24fkMpTG zNVqPe%Blm!M2LOYsg!5nh*QHv%Z?>|z8K?aYfQeQ>^~%*(-~>@~2}aGK;-!i&e?SHp96} zner{AdxI`Bk6O{w*lmAiudQ3j-kUf6HshlN1CC=PNvHXE96S$n&mte6#WIWg@y+ju z)orPR4_9N*-LtDrT8#cX{KErJu%s?B)*;>f^_-v2A2h!eV0U7+e)ysIVHgXVB&##ZigKRurgNBd;<7yi#)j_RV0~OiJ3{QdTMF0kZ78?UA==nI>(uK6hy&Q~ zMrc-vtvt68o^Reie8=y3;% zh;1jP49$5&8*}s*p2gh;K8GX%A{Eb{|K0{H+m7pJj^#Gt-etwIP=;#m<0yV`(sTvt zL+=JNf0f*e`$58FlPuNua}LPUb;zu8?U$F0vDoWDXUmEVx|doxRtm32`grN>k27tQ zv{*;v7|&#E)ElD~_2t^LC{0kUEdO(+v}yww_-#%}q}J5Ymhf=*#I|x@*0?`24xlLg zN}V5&o8;UJA1GRpS|xay^=)u`q_lGadSte9!!__%4yx(-4WE=6+s;DlRwLRQ03Yuh zOxVU=V;FTiJiPX)@(+gb2a4wQ5Vi6%OE>3WN;=>dz&rB2LUNCMdeaga-OJw`t=g%8 zvqnzA?3oNgZUW>8D@&FGrA-H|_|1@8h4P|q<6UjepJWE-51;;3z;#u9MoPdn73`Jp zgpz71aitlY&OBY;{xyMnWzOFFIMpX+vw65eIaQ=aY$nkFUphXf)Pw7~`2(Mz!fN~{ zut#HC-kz({NspQ;M8uq(xo$Tl__#mtuI4sn=-uSA)4#?^KgA(I-f5k3cxL63H5x#j zEWp|3{Q>W~|I@?FM){-6P4_8)BggoGS3&#LX%Gn31MpMUg(e>*h;6v^XKAmcB2p;c zj?+(d7XP=hs`wv6B~7kX)rTDYA>p+1H%Wj=ujY-^yC_G`2M4^ZHKDt(Y`8=Nk815bit){{^QOirND>&*Eqid ze^g`yz#xnKcHR71L|q7>nZH|3$p_MMcD-T%FrH+#d0wEJjH(Byp_)9ce3QF|Qg`tbN+b$X@cz&|o+yG+x3i zObFv7EY|qcIE5I+CL;#k%wh`HH1@KO|4{}-y!R6k{=`JA@R<2v4IJnhs0olm1ic+d z;F(9POsP{*ym#CBEo-)T0lwE1sav+ zJN3gD@qJ39NIP5uD18fKMOKfV|1H+0=Xxxleb^yIdYKuQtSBgomj=}zl{?u`hDK|V zX${qNNMF4`L?+M{Zib*vB90r4w~A5dbYcghb|uZQv5)dErnT(T1eoK^k0=k#k~f~C zMWNqa9>8YgjbLV*kd#priFnwz)G;Z~vUY7xH+ec`tG`3j0#wAS*hZKd{WARtBw+QL z^M{Y$d!vI-WuDd;(SAdvr4)0^q<(uj&^c!8qY9B4hS{_t=E)8XZVa{r70P5ut6)9C z1D_n}_qO~h%vS6V$#RBG>w@ovo}5sl+og-U(^GBrYm^?2M-PMtH_nc?o_uy+z&hyomab=~v)aOuN7-gSz~uUoPjz zr&h#QKDH(}pw?H$H~Q9p+!*QGqS7XSa$YMBTDmHztfD`=N{fZjCOm*&>pAYHi?!0V zb-WX@q0EIFd_OGWlD>4$GGOxRm6l;cWmU5|V_t~_Z3oJZB+2`*Husl)s{!{l=Uh(} z!6qAN6%S`*`?_Lo0c!S2S2k0G1Fb9niePJ`=&`((NpG<{DfO^Kzr}QnW+O~hL@<_d zC;{p{}5Hv&l+R$6`xR(n34S-{};$c#dTZZ%ly+2z|-O6aCS-n zfOE!!c#AVwi>IMrV2E-ZL7|ZR;ibX&Y5Zy6?uab86Ity&cHcHbgxxh zA=n@M7F9uxw%-mGJ$Lg|I*@Z)!MC&g)oWNt&5WpNBlfKgZ{ZylkdiY7 z-)yd*8Zi=es-RUab{Cnge{Fmd|G^|-1Q|g-JhbF78PIQQ5&M3H;VO3he9o5G=Wkr> z75H?a+fKG|^%a30XLFnATcW4+Qk?_nJt6@s)qdadBD%io6pb4sY?;lo^0yvX3@>l* zhI)g}UuwRedRzb@D_0Np@ttYOt-`D4M>AGC=oZn{v$^JXi{Mt_B+^u>)nB)Yh?PL% zsWIjoS!G}aVg zN+8N*Q0-6FR@Qc`$X$JC&9Em*r2{bEbEbr_$v}Lm>(V@~{eA0KWxT-H^9%JUN;Foj zi9#o3K^QX^UwH6@47-I~zty5pvmGYSG?V6@x)sE!%yk2j#;LHCGnNBu2+7HXhN+ zh+HrEsN2!Vpt6z0fqJ&AgvdF)*3E;ppjNPW?cWgtu1kdB!WCyt;9!d{+_0NDHd0#( zR?_);Vt?rw?U3BVy39w|UFgVZ6#y`8bW;@ZC3HMd5-Y5Pw&v^26SkPrKN&mdI+f;y3Q>ggE zbjnF);Opd;zt=k+zMs181<>e^pt_AVf`9r+i?Ri4BmPWL^km-F$P!||cp5RWa=1U3 zWE>Vahdv*Hh&#Xrr$6-<=sHQIqGy?^QBebOM0cxNMOO)j zf1aeV!@TE)DwsPli5DU5OR6{nj7JqqvtQhUA=s-s_4&?7*~r$n8s!5xAB zK}ML~TuP%bI4R;!@Y1vjrSq#y=lcvhIjgBUU^3gHwh{b6-tI8XRIszkp<=>jP%+^% zs3@(s=CgykL}HlCteXP=I^z;zli!+VLvFvOsq)~9TGhb|I62kl=JFE1tB&_}{&rKa z$0r;p9QZA$I0G9fKAleNYQS_NRSy{387#Cf-bXqTw~c34B8^c8TgKCihb#d&pQVjm zn3xEO7?Qim%iq)4X4LsggQinKN;_gMb+tP^b+yYv=1)|!hka)X6>n7d;ZHHQT_E~rqjK{cyC<{!m>T{- zL9LdBF~VZLU1yAlBEOdG#Ye*0L_607KGX7c;1T`Bt&6?ziB3WEVUzDbz&zV-;2b+f zup+?d@o7vBaNDpE#^h;y@2W?(J&ab`jwFo5Xhq>UE>?V}HqRw2 zF9z$o3u=#FloGbgvp}OhWhxoIXSf!gpHLvc#sZTO)86qwR>HM^`ekMfmn%54fVR0% z>D1TqaJO3Ve>@ET9quT32DD<>PU1M6C%DE?OEl&Kt6H!QcD#lF*SB0o@rhLBA zgJjwxm>5^QqSZUkWO&ZZ@TTg+*PQ`C&#;YI5^z7_vAxhQsB@)n$a3{qTnJB!=IRuM zAghf~v6| zJ&Bj&rUe=u3dYL_J|SsmO4#<61^VCUMII|#T_a#WXSI|T9g=#E_pQEcX2_1wEx&O9C2dXl=ES||qUd6JJ7VKin~g^1nfWGYmGh`9rlD|aM~w$P zO}^W?yUT9S5900x^R!v6hWwl2+YG+y+tEJCYGj^Hq5>+xU;S;OkL;2IMIG}Lbn~X4 zc6M?4cdsaXv2NEve5iW2{@DM;{5%b0!EBBHZ~32@8m9wU+^mM!8;Ud{nYE31no)DLd2~}vN!`d=|M6r= zd`;OKp7QvW9DZP?p3Li2nSbF;ZbBBGwpNR~C>EI>vL$6mAm30c=O{ir2)PM=?tz$% zFH3StVGrC+`sR0FahlO+gbA1OahZi=Y={@m2x3?2XOcFe^+?eImYK3u_|RwhW(iFo}CPdj5oA2EZvhJ4#2!SilY;|nbPQ`<{}eil|UpCsL^GHKuW*X(wFMxXnp;e(Mc>Lc1% zX{j@q&2A#0X4j;&UcDWej~&E+cr+{Ol-43T$SD<#d^>@#5xuWm=e`n2SXM)a;$cUl zI8hJ`48e3(yy$t`nuBim>GpP@09PdnRh&Qmc@a9%w#kVbjDg&%JmQB68Itw}+@LcNONI5Nk*RjCB5CJOs-&^Y9vIcXrky^> zR)IDMaSFE%N@oKRHl#3hyD+I3=J9ee=s=&c0<+u6swl$qHI`GvWyP_NTCv}EqA^)%| zD~_H}Wno-GLEMUI()+fgOV9TMU`b*^uEw%P@ZdC)WN7}5< z>2ygyl+ooJCS9>w@&ieZdu^zhwnb3in}^W!#gE_aS=u=ee;haioytD?_L^Nht3zGj zR6!jHFosiQz4X@1*k^6Ubjxn0uxjM`A+v`SPP0wZpzo*NcL$y3Z6ZidC=HH&Ygi=7 zx~?Ox9pl8iCgKrmaU029hQKUB?ucqFs1QHhVfdHa6s2UV<8{1GH{dL@JY*60?oNIy zFuk+@5CRY~eB;$tBx$YF558goyKd1Sg1`TU@f^U9auupS6jY9HTWcXRBc_U*An@GL z50kW|`HzV=Y1aFFRFFR#OA#L_@c+Fq{m>3Mh(7vC`>auT#s2yJ0n1jYbC|_UW?p%hW->|r-Mt|ty1~Vsd>Hz7;Iu1gCD?tk z3F1nf^ohdYN@n9;d@iS%)~Y1AZo7UdVN8qLKo}A($*TRZz31}868gk=uns@ zEq{_;A<%dAC=sFwhau;Ju(L+(?$>Cd(>0l;lByo5CxB%3z0GYwjrQJL4X4tAp>lUNcvvwA9{W=HF~)JBJ`ZvNXmrnJhl@=FE23 zS4$p~t)zUaBE!-Q)=c@$PQsrQbQqt7Sx@Yh-??h3f*5E|ppfM`N~&}7{InhO3{8B| zvR~#BG10!MfYWyIwK^j?UPxFTe-Df@YFR~NKo=`$j41eEgAnKf^++RTT!dcd~zpud3etw;5(!@_R=&l3nJQ>9Qhr z|BKw!RiU}dm`CT!{SNmwu2j49xuFO+qfC;aJ`M68Bb@& zUa3~}do?3jR&4Y3r6KBtkiYTjQNti4pcJ96C;$&{SC)&5@dWGz)f*)4sr^2%q!HRaP0+7u&r zBn`!z0kT_wB^A!94p@O_B>Tr;JWfZHjp03HdA}`0yakAlr*KwY}{|$5MX$A z`seNEc#O#&?Vv|f+G_UJ1Py(X^i<%GWuQ_Wes#{@h5EYj&jsC%@|z(x2I-W$3Mb|Q zurNYyT!Hb`udhtcBYFkt&@bS^TECKKPwbiI_ z7SO@TUY{{-4-VCB1EHEuuQAKUSLHKF!s*8Dx0T*Dx@@gP@ka=t%!CfAkwu4*b;)hm z@0vo`{o}z-rFx$YvwY;(Nu|GZ-+_G_*2H3(#v_HVY=+50KT{N{CJ*T~G0`EvGF7e* zFSb~jl#E8L=N;NP-jNkm_}+y$65Ku=wm7IPr4zXa)nr~J|<`+$DtrP&IoeDpea|5T{JG`w{__M((E665`=Q$p; zjD$WmJzM)Eyw>Cbi!{uTME~5UMl;~GjtFS3P+|v^;&Sh zL7{;#bn_A=_|(1SczZXpJ@BuihwoI$Iq&)E>xwX=_R~2W@xnK-Wea@4t9Vfr)1A|P z8e@zrbP3hEz+QL5D78GYJVi-$DYaa*;(i!_T~2>7V~*|*wg=+#2n4BiR?<1P^%0g9 z6uv1}8yX-b6rqn)5}vaQ7?k2>HgsRKgqp4 zBV2npd39wrNe1RZNTo2mO*2ws`zQ2zu}2KMoFqLU@8Ez;#iCQvg>13toa>>gpr;%Y zC=le;1~o&wEM{q-a1e7Z&@duc) zypuJlf3Ucv4H+bR;ozYMo!+;LTuZg2AY4Z5-WP^WA?oA!J*hjMKvvGH%j-6`Z`-e=BECCN0qH_6;wq+3nZ_oTxZ2BKFel_ z0yM;qnx`oe$K3jv)%aT#u3R=Exj3SF_r5Z4Apa-1S*MtmqfKU&2HhOEkUu#=L|YBiRh1$5!Y4T{PPr?C88&b_bc{qDPvgJeKBUqMV`1!sLqa z&VUaw>b`San7A{n$ar3}9XH5Qhbd?k+nSAM{{=%^QT-A5Si)II!cwVb!Mi^3;*teIrTyB zZu^9leJZ}N*G6gmZMv@MrgzHUcBYf=*EK%;1Kqpjq3%xtC@Bs}kI;O&LP*ZyC@t1% z-s)eIax_^jLslXvKgHGmKWA^yEZ~x&x~VEb+3ZYj*w48*$L`9Z19HwP|6S`!ZrYpl zmCG&rU!!g(9>tz|YT=-kx-TTMaiO`YWzM0>&-$Pt0ETbyvAJll^Fudyyp3t__%JaklW#FA)?ktr zKLR_5zhKNfoeWethzMk%cd}q1pVFf&>O~aaG}xV1H(a1>+;)?AtL!xXqA$o*MefP5 zZ-A_(l~o(JpZRt@h1vx5mLmePQ>lGh7?-3SD6QzbA+;2YK67uudSr&t!$_Ze(W**J z7iUf6g|#I~6o-FKqQVPF8U9u1W<*tveyT4an$yj4 z<{YcePyf9%;D{Ics{Q6+ef5!Op_)G)8piB8PAb%cP+$F6 zOGE5!L(5fFg*&L+<_tA{dCM9UYwbqYheYu>RM%xuU&4)AJ)zsfUCU`w6h71Z(?J_u zl9C_p_|^Hw-@|c=X$%)I)wV!IrX%8lYk>(9aMhJe0Htb!)-mBU$$n4>zM(thx7`Ah zNsunnFw-FbKN9PRj(&Wd!G!3yj#Wdd$(j7Oew?4d*rIu7mBYkrfl^qSlja=A z3^260J7&rE@`&D-f&*|D&Wr(8&Q?%;@6SBmd(29~4akJk!9Qb(IoP_6ptGP?%9ou7 zr|Q~F(@H6=x0-iQWoC-}N<)_fo(xh3iLrXByHhBiI8YGDrquRJrj5uaN`gvQzwKr^p8vz4#_k|42I(Yr|pV&ka zeic{_Bug!baM#B^qRi`(qm*7Z<=R&mGSphpy+{j>zuvo~oi=^bFU4U3i8@gaHxhR=PWf5>TYOK^p097)rVXq)WQH zySqz}?(P_7h|Tjp?>@f${lEX-*E-iaYXc|ti}q>xIaK+eqiI*NNEQ|kL%6W~X3B!K zlBn}9)e8_0L)yg#T@43DZbdNK`5-r`16Vk!v7CJVOQuCXASi03PkzCGt3OE(yv8Ms zf&G`?62$vR0%=)(tTQfSW+jOE|0gS{j+BEv)%h1|!;4tfE?QA&sf# zuv7`v2v6L#sXRorJeKgaYo)F5z)%egN#Yt`Ta`Lomib?sn;Mo3v`Rauw;5?)KGt79 zTGyMj?pw-f?{~}y)sMb59!a*&nR$yIQjgExK4`d&+Q6TjSiYWevNYb`Pjt}1E4Et8 zOxHIZu7Z>Dug^SMDHV^13)3^8nB%@BEXM*AqgUJCwEMp9b4M|vMvgmXd4I2ctLS*) z>zl^%p9YpCEx3Ymr!}X&?46A%W6t)_F0YwY<&OvhNj$YV>{mg-YtuF@>}AOdbiowE z_$1i+VE2vW-_4pAZ+`({AO_E0l(#$u$!lKc?QXH62zardan)|tN{J}YbEM7*{y8+5 zsPLqnxcObDX;AB%_=~w3(M~s4G-vYoOpI~v`%dtKyg+xf5P5HBW4mr&wC3O^1~~40 zbwWEmT;}f63BUV9W^mJq-x6YV43)4Y+KB=kY8L<@yCt!1J$26%8Y%MaC?QrcZ6=0GF3U z2kH9s-KGs5XKRRZzyO_1ue07iZi7ZF_|aWlev7MNTzf~0WkE${TA8u01XundyhOP$ z`l#)>oowvbR@ zcXZPEdw$8UByU@!^bb!k1HHnyHpA5qA3U3>FQ3-!@@LNL6^BveRIBf-7}UxOs2Xgh zD=xTO(g`XV7j28g;F}{)KUDC_l~wW$Z1P&jeM+=#mWwpoe=@9RM;9v~a$7G-Y1n%B zmi0Xo5CT&OI<|&T9Uv-q_vy6;W+G8qQjmSps+(r@XK*SB2)f!}27SP=ji zqL>}Jv4wC?v8U6dH!2?h0rmSlmh@TP(?OezNTHk%l0&h$jEfhW8{@TP-*qblpRb*> z8YFt_9A`JYkKLR@tA#O}pn+7cbVMVZEPOWOJy ze{Tk!_9LMm#ktKj7z%M-kXp4a;{%7ef33!vVu7W41K|Wtq4hmcgim8m(R0DRxk43R zzxiPg#dw^$2U2g3xHk&{8t4L9qZ5Eiegl!PtMoSAj3PuJS&l9&=2-lLaF2Gd|-O%|e7HiAO{ zX%{NN3-2MgzNKZLKl!Ch_CW@eTv~t+D_M(E$|*rHe=xn6hPbHR1Lr${b7-8Gm&QAd zr?Cad6|ZLCsqh@xI_JI0B{Lu79K3oM)FW*m_Yf}!Gmd`YyMRNpw1BtjCMc}4eUpw< zuJRJh$ZS7AzBM(s^vJsxcm&6SaNpqiE$6-fAp~9nPBS%%QP=1-&qV}w&oDmI2O_8T z(W|K<4`1yXkF5C`qqj`4giRCC{NSPs9At|y#G75gn19}(A%V^Vgd1^Cp;sxDA5(hc z7>qR+t2D--%8%*eD&IOqsl%>06bbcA1#^9?@U3rJvt!^cp?f@RlZkXKKw*>jN~g-T zb@$t`=<0<8mS~~`e}aV8^z2&oiPGP+Dv;Sr7g?Oo8#r2HR#i>plJP6v;|N`vtWuz? zN-_ZraYmou>VZ#U_{`V)Izp`O>|&9Ne%)({C>1LmCw!>YPcrUx`Q#c%oBl7mbf5RA zgkN8Y%#?7$GqV1h4Neu%%ft* z>jH+A4K+3Q%3=m?tBUaRcDv~FV$F7e5w(K4s|31Y@BVKLekqQyoA}=XO3&Pq&v|83 zFZtmJ7;{RO+ViSa`of78(4R7$mj!P+m8Cttsm+Zd%NzthBHud38ENBvD3SF4-V&Q! zRxgNEG?aF#x-nniS>3}pq5{XxuNI#9$7@2zi$OT@~z>b zU~nyLX*GH6>8P{reuaCLUHV|N^F<1kMR##LgzSaf;05Nk?Dw3id~Tu_wx2`$KzvC< z8zdBkZIOj13Zc9A*b<2E3Y?Q)D{8m?b?y)djcWhGQ*v{U#YBo=+MJY3fse6rKd|m1{L^=co3a%SKvmon zd9yB(EI>JD3`0`%rzcsK;^P`T!MXml$TZ^_q9@F8F4LDtMX~RjX$&TS z2yDP!-AUssm%-n5a_3{5TR2%xvfXU+x!xqr@w}I4JKav1aX-E00$buUJvWIXoMhWV z2XRibNyt^#$xit4UkGEXO-?qE2T_w@(}T9M&{-;<$=ik|t2=(nO?oRM^Sk)uLv}JU z5p_PMm!8xuoW)C04@Y_J5hv3YKvTc)mg5SE*V5Iyy^xD{9^Zcue7~zDTf4a6*zK~b z8=g-QqO&UeDxFS(+etE#LoyPcc^AEFtYKo3_XI_b?HgpTQ=CGO)*(Kn1^;x2Hp2tF z*QWPwLQUW5B_LNU|1D$mXEi?CG+62bx!QDJdZ zJbIotjsYr9zRv_^x18^O&Tu-nI)|XlA0q0^S3P)@tidGkij?$%4T^J&qKJw<$1lpc zOXRP6ODC>*8O&?ftELp#m0Xm%Bs5xk?9!`AMWwbEx|}yoJ@_${JBcvo8Y2@Q#s55~ z*SIZVxH+<7xLy!sSjf)NXHwE-#b@{<6db<1&HCp3!p)M?oW~7`&6=MSGdxPILdr%p zdrxOXqu&3D8!Fm-)Rz0`vZlT{V58dNi?>^@t*n;Tk+0fohbNE{yDG5!_66pxQU;xH6n=Y3f)tCW!kmfxTP352(W1*U$C zK>9*~n;s@h$dWO8A}9vLRglt)$ekU&&H9M=av!8XKffVOeCK6DTE&TcEFPF zDHSg#-(QQw%qbG}lF;r-90OfYeWa$Sj2@)Yc}@(0RnNZu_OLc9gzLB@`jP=#7Kfew zp%s(JO~koG_S(Q0O82zpD1n-^tP6%mjPoc$&H)zNGMtMyPB`&GGq`kvmw2Z3A4%IJ zDX^sLGBg!a$dg@_DtJ4qpf45B91<4OyZCfPV;4_tGo#XM9EMI!J^ty>g#w8 zJw5bJ&g)f=Fh%N=i}nSbH)PH<&0vDw7C5Z3p}^;e03_<#toPag@5@Uo1x zvipE;9ymcl`($t$(94VGvO##A+!BX+)RG`=udS=t6^_S4W(=WcIsJ~A9i@=g3RTR0 z8H#C9qH%FDmH^KY#|zXEZW7lm9eBC_^u!HmnSI&m7Ut0{8{YA!r?4rgNZzUT#i5HA z5V0xqmA#RuKwnx#b%$ryWJlv1U5*EKfvPq{ftl2gf&hP~u2(xn7wU|rViyUp9zZUR z)vxI!G#jm=cF6Z$d-(Ld>#{QnM z-y)FYTQ4h+3QsJP{@vvVx9lGxP70szufM&(b8rH@7MT9;vu7H!eP?tM_qVfZQ7kR( ziF)zmD|&jZf@Alo`D#bV)BA@i10&FG^w7VZe(p;OkZ5pN7HT$Co@B1@tqJ5vOO)Z* zi@`Q`=FdX0U5LWmUAvUF$Q7sF1!-Bt=+8rKsI!lUbE56por>~br2I01eAO2v8Eqc% zuZ&WR^!Aaz5TuTOH7k74=U3P0p*{Lh)ZA$u%YyuN{;(hMy--<3YWvgAkq%`ocmwQk z^ERH)%vUQwNh_EMP=d-kd3={hM|`FmwNSq^+v3GMkh%UvIQN*|{Dl8L^gP;NEo?SU zLPzcF^>%u4%d6TZ!>nd~^E&DRF$qix@NqiWztk|+>6d18|d~8z)QqVpJ`52|aGy#vA^1)BkY|3EEL%(#s?J@!# zrF3*ov+R6`me3$C<_4jMVAp7xq3Hh35^R+H61%85WStlWXtmf641qJ%_$mBnR|B7? z0@xz`X!fXh&LI7OuMqIJ-%Qm`G0h+dx9tiaJhFLM2=&6ycJmtj1$;rVK|fb%Ad(jS z2nZg+2wBS8O!vU_^IzGnA`(&acKE}RXYAu2lQLRHTE?IE-N6*-YVsoVeGmECsV4}1 zA&2)k%qt90x0+?cE7TpL3!!9c(!z1V?J%n-=W;PzdxyUf?161Gb8Q;o(Y1njgUM$4 z=PsO|;X1mx+k0T~y%p+Yiq)7OfNGD(d;!b5s`|Ggi-F_;>d}b6XENIk@g1NZo6jUaF|8k`enQ&s)E@?XS~$n}*&nyN zp;LZ*{N^j}w102AFMw8jj|g^bYh|ZG+v(h?_!JW(gd$tlk(axK$6S}1{|LRHy@~w< zzU0ete&{gD#h{ZjL=JC7!cEdBTyNm!A}XhVH_Etn{dDT}rT1DYT9gh6T^2KZ{F)7( z_S`*-zubhud(u$gm$x}-f%XJ>TmIVC_A=~r!umq{5TflQ_^1j*F?3wCoT9UG3??r@ zK6cYI|JyzwKTmRPZP_OlmEI~F(c`AY$pm;;XUZl<(%!X>U?4<(-Z}$g`SS?gHrKue zU-c$UuT+(%S}yN+Yer?B+W}(>fqWKv-;XRv?WJiL$4G#^P-2p&s_qqP(6a!(C*MNA zC%)u;{s%`}V1@HVxECKrp-58_@Uuf!-5#0Y_;UOu&tyIA7W0ttbv4BjJ`bj-;Zz6b zhoCa?guUy zyqBMbM`nGOgB75LSmhngPGe|TTn-2mf!&JDf^8Q*b}HVI2=_;NBoDxmwER?zG0)jp zlK*YuzpWJ(Wg)4#PviR+kQB*nij~qllzPAU&pL>3yScP6wc};w&I_9IjZBeVC8IMY z7Ey6m5o=db{ie>13I6`hV5s@TKoPuQOb@4c4EfXEGpIfB&=n#Z&VdY9+^X@TW`?Vl zRvS$`U=PQ|xO#UP+l}!*AaaSO02#W9$Fx;7CWWtrcM)Fg*s5!r?6C|JK|yF4BJZ5|YNZ5Por}(FGb+;lnI8>g^0zduOKU8Ss|K7a_QT(*Z`Ewd=z~WPRPmprH6aWx z^X~b<@^kgKv(7f#T%V9JRel-x;i4QpZgngR6tsJK&#B`5SezT+j<~si(XW2(N5$K~ zT~Ig-f=fMSGAD6c7k$T%ljPP2NJtkU}CD=Zg}p)#v(jk~E8Ykf<6s!DvbP*UnjDtI82UG&)+w6H3J}p4wDB+LJ{ZN9M{(cDP~;^mnN2QA>fQCJfOQ zV1MR|9OC?x_@5zA_vjS_d4Kiyix>EhXnvGVka`MpND@T|Ulc>3o}~6pblE|*n~^JT zfg)(Vond;_;J)*@K2?4tTYvPfSmuRd_321t-g`uC2xIeKAsvWbe1`6R$&}SZJEc-3!r?izr>RBE z!u~+nNEb^M8!m4afEywZmkDvwKf3uicW(LF2WNml6@_Hq*aDNXjEaKFUZ8N4iOfP# zmlxxmID_ z0s#sYmTbQ!1@`q@ZXr|%WgDU*DYrP=EyCvwfzoHu+Q7QV+IbZAhndQ`IH%>2IDziR zK1sG0uRrA112-OvNFRvyqMf)fUw~9ylMt*6Fi`PlwY195=Hc{@SbkvRiC;gHScO2T zAcF1{bCy55NYE3KF9;Uw>st5#qv5Q&zHLIML}vhb86kwAZ9$mL1KoO*~A@w8(4{~g|mTmjO{(%CJqndhVb`2BF*`~6jNIPuh#|mJN?!N zzE`mELfHWk!d9RDu7)2BqvdNxZ0^(XRVD1Cn8$^ ziiw=4U|40-2_z zju4=O%cBI{i0RkAa--&EGdKq#8LikKVrd_{`Jd1r=zd)iJBV}x?$?<^z@m?1c^x{k6b4{X3%lhK@xyEMtKc zrwax0mWYdb54!BFP8wa^g>MS85iugo24x*vJz)cb9?hy{Wd}{x)2R? z#NhJ(p8rJEVaQQ>yKEW^`wg;tVev_?Z`}~T=nLiQ-7L1Kyq53kWTA878Es9lopy)u zgWKtdvr%#7W)K&ml3P`+9vCw{%w7f>U0b7A!hxVc=xj@q;Ebx=Zc86 z?v>iNl;#AKz`vSh`Gnbj0Rf7CVVR;U_79Rw_5TfQ!LC$*) zQhH5e&q{d*+4^&zwk@{W{2{mUtnc_D&V~Ulud>UcAs1XSuav_}RH}MyRx(|Y@x$$` zOk1zDWK6nTt*?(h+EwkfcxI#h!}1gixBt2Am(jJll4>*W&0$3TO$1fHTFK_W5tV{J zSNQa$-gs6;hWSJzYE8+=MOR5o<=&r04tB*~$q)<6ME6r0JlmVFH|kb-9Hym3pQC<` zm{(jc@Z1*bYCIfst5m?qkMcPZZ^XNW7;a_oKIJ2-(uGlc+t3LIWOe&Nqs0r{+R#DW zUMCNm%oUs5nY}S9f#>Pz$el}Gd&`$}lh0*Ds#ANj#SClX3Sy{Rw<8;B0#3bkS1`BD7Gk>-Yx1F59aUk`wMxT)j52b z@gS zt=hJlvfa(^9Vnhs!%sS47Z$WJWB)N0i{>i&b-#}An(M|vU|FoNdrr`A91G&7xXmT& zqXwHcKhnpuS0{j_5^nE5i|j>Nx-KBOhgQ2@r?R^mpF>wjIS1CTFPqQZqxPfyR=GXc zXhS7BF5cafkbB~`_4#bI2(8u&3Xqww)VkLsd+ztgd5R_M&b%u^^#DhGks#Jv<)5KB zYvvb)9PmyI&)!B@<(8LzJzjXzcxS(k+=%tJiH3ZFJ_gESZ}ZRUs*sF@c{k_hs4#-d zC$NLZL~|+aeqDwr;aLZ9DJ_mm!){(s7<)9$9r8mcM7LcpVk4}n#jzYrb#ho*Ra`*~lkI>%HcC3SHc)X z+4B-4W8H0X2fEtN*r6ymhs`vawZbYi(pTBmGe%^4-l|$6V(Dq-$?m}4z=Lec&(HtZ z#W+oI@iD27Fxd8FCjm<8W7wJd~U}zB@3r{c>1v z>I7kVP90+JiKKkOYLfOI2yig<=Hn>H%ncFQU`MzdO1ttHz_H=j(g7RF&R$cTzh!2t z8?oM4!5u>Ntuc;tP1f)d+Rv=JD6=6yoTA{Q3^b4<;|Hj{VplBFg2Hy=2fEP^F$D5W zXy_;^51Qdfv!r3nfRC>FMO;iw+er!(dr(?o>vB5D$wcbzoA&{=0vPRTIxfZ&fH`%K ztZ0h0$Uk7CF*7`0V$hiB>Aj+RNokz;fkT|Wo7(x4N#u-r%wm7nG+Cz#&^V#Ru}wK} z&;wAiaoN)086L(dIh=!=(Bk=Prl;`eN;?x%>F6p)=8m|`38TfThc@cQb6$H{uq@-3 z`OW-(n3s#lZJ#k95pKM`Uo6e}yyFJSX25{Fc~Op|b+uTZnAgT{Q5}4(CGGnuS`NCM zAEFX_m8Pz9ga0^P`cROeqrOyS^(~ZzmSi!E)9Y3yNuJ>a=(p@;pa!-rUDj(Y zR!^$nnS++a%hX%v{~1p!F^nH5f$kBfK3ft?Ci=?7y{L*!e<~R+)I`LiQ_^O|W2`W` zT~|H3N=$52MaH8u&qN2lv*@V?qPV zf4ME7&Huy_ffPzDo=g1!G$kJD+8o@ScJTuwjt))G6OVO5VDWjY9R?y=hU=j-my8)- z>4kRWlPeNC_vBMg05L5veC}WJF?JQG2ZEZ`rGDRMPDRtE&{Yp{R-pB*-4r@^3%33b znVZB-$!HYGdC$tK$7`4JZ_SBdZRkgbL|Y!`HC1Zdm`J7%K3hOivm5N>O31HbqcjOo zgJU-S2n}>y-{aNpO-8lqm)4w!r-aX&RHJQ90!`HOoO%4N3+$e{Fq7*#eEG zB^&pR%SM*Yz7K{f2a>m*%aqNRNdnv=h5db@6+Ur#|FdULc-TSSVCDyJww5=%^8@QR zkr)nc2YJuu(0PH#KPSiLlp|tqi+=31kuGzcFz)GS25ADT0QN|1+g;J^!(>?+3+74! zUxFXV4Bw{;lEwCJuMn{zVdl8dj_)xDpSRQBb6)Aa25QgGXuDCZ1rR~$sMgt3$VJhQ zD@S(Z1o;puJg$b`%dS~`0ImQ&2a|=>pRT-5G!mogvP}{bXKFPvRrB)+gO+y-+ev2uW$jTC#qz2tj#g=CBidhYKMD;O#j8 zTrEc8SZ`BL$j!QQ#)wpr&YIz8D?gpP_NSj{;ciz!vXgS2#AD6l)KBTuHb}97>ug>- zlaY1!&jI%YBF`-$cX)oGAFab>>KzJE%V)1vX|083rZwttL`*+?2~27@Y2230%+qqB znh3C+qejjC&vi7X?7;F|bB9Zmp)4}i3W&j1qhZoHK$g`09*%c6@u-yyvhOpu8{{^F z>93-}{5QyTjz_N(JMI%fqG?mr zS65w)Bd?GpG@lBC4tz#SFwadE$-HKSmV6_?V`jR(zT zSAVE#+2Ix6|NXWaT>5L=BjB8lG;K-E{DZTGa+l&K7)U+c&QItHUfT)@k^b%JcYVyB5(z==zI5M()6~(?lNkd9|ZsCtVjan$fzk!Gt{fLX_LYiJKFkX7!<;0Msx~(UA?C-TtN;$-Ys!a zyNLQdqPFd_TfE$5ysS}~IG;J9*O2Pic~{{$Z z&*Qopq}XNaPv312zvB@YHAvR2Nf){FBFqVyh=D&tCc;#PocOZB-TEKiewJ# zx5IA?1Ey^MbR@U?a~V+~reacs6=N0f>TVOG=*VN+%6f%HtkcUnq^}dromimmeMVD~ z&(0TSLj``uh3w~e$gd?U@W)d#9uT3VS;0`^!OOvxI1k?uWwe+q=0fU_e9b{@eSFPa z^6jk7^9(w)ub+HWRJ)>mjt{yh#KAS3DAQW-4(kBKnIcS)CxeXC``l;bv2{8K_^JSN zzu|fLF?@qU!^@+oo}bd#&C=O1{@7K=xFGOTpzO)#<=S9BTnRqSfB)Vf!dCuAUjB<| zn|itKVRb*Z|5dSwi}Qmb&Ewt2_{y?_!8UfEHEv)R#6ymJiuMLKf(R*w&5f()uNTHapfCftti6cg})9Oq4d_T=q`e5qru7dPGtJuPYus{@GsbQ*`;)i zqowqcdz1Z@>|RsCRY0=+d^1>kxZcv4$&VZcMZ~AnleGS_Q)WjN3tZ4&%>$l2k5sG+ zyvP5>=Q17-anqwDE+&OI&5Nm>A|H$PRrl8eE!-!zUu9*w1C)tj?^Gj{|KtuB@;B z?)LmDGQ+b+{5k7{_jdo&(BEIYtY2ht*qQTI|5l%KAJZRyv`U5l`0~Q$isX(3cY_7O z6Gs1Dj@|N}_J-j5NPv?iW>EWphIwlj?|piSzUZXv-;{ePD7r0R0Ju6hw64D{fSjI% zto(Dy9p#43z+J@I0^X+@MBI~;spsQ5t#ZBQa7}>e=`d31CSokRFt}go=_ON{bH3R29IDrQ(B0?dc*$4F6gL- zGEz_l4&u<*7~WVvvC(gS)GiOMY(++IQL31+n;)_T0LZC}WZ_~Ck7qTTLQ z;(1?DGV{!-W(_Zv0myRu8T6-eYs8`09b}lDTYbBZ!AmQx*>X&att|P_v8+80J}c?L zB-Zg$scc(RUiEUBfovkGmaOS`R-1S{S#<=!8mWSB9f!AIl3~i8#a}FU=~bnWkGa%3 zJjZXZ888zIJ*juS%A2niY;y2N+WsWTXegg8rXJ;Mtj~_-kE9$^F({QAp@1i1~Pco8Mql$C!;9EEGKXJK?w+X#`HhNs1cA~y6kmFSzn9RCA#%#0c_g#58 zvUvv4_AMX{EeCAL0ky z^k1?B`H1Nhao$RAAU#Sn1x=0QFa;^W-Wt_V=FQOF@CL9wokM@N5r_ntz)%!7LpPD3 z@nFg1eUN$I_Z~3gQ!;PCWGl^uV>*vbDsqbZ_bo=Wu5fUl9WJZn9-aK0M{&<2puY?? zuiKJGx&l1{pS20g74q4!Cd{syC>yZXf9Lqgz z;z1K0h5|q!gsCa%3%p|>(ne6c<11cmK&)_(nm_=>^xlt|yW?OFT+$!oA0q&;t*A}e z3bm}XtTg@H2bP1f=objDfI_sa>CGzAdniJaK3nD7*9b2vV_IlaX!az&2Gak=++#(2 z;_-laVvp^CouIAt=p>?DPM(C(#bkrDhS~L)+TT$dQ z?EFz=&j*;%>*N<(qmvD1nbw*#k`3fQx^@zU-NtiPV_X;<-(jvh1D!h32hc%;DnL<} z2kfTHrJ+JT4P};xq#e;0GhJZv$M!~JI1JDxcZX41V3i_9*i~OoyDg+GH8{!mcq577 znIjqeVd3Y{dyIt~vEYKmpnS&qBhdt8)r<9DGv$Nnzk^r1LR4p|+^5_8(Tl^lY+>d> z%+;1W3f}VNBJmbL5mDMM0j_XBvN)Ec)krwE`mA;D(zgcLtDFkR4-yB*m`Vm11Qt7a z2PGy<)Xq$ZFSDL3(_DP#Tv%Mgk%OcxI zZe9H_M!Qt@n1^A$B~hl{(*T*cv*O6Ez4#Neh`PxGO1O7*(0*>=Km0>AzdcV^G2F+u=r!sr3r#4OWU7uTrs|2Qkr11C3({D_j=}EK2 zwE}(kgo0wMp`kGkL)6{`QVWv4K;8{RmPKfeIE^S-&9aYK=On70i97T>HBR!2@obM* z9`F9n)5nLy|8juQWY2IvtAU@hG99PW2+%DN-`oeCKkxlkulq?cQF(4$y@qOJmHvukSM1crBgF|-Fbh<+d>IC5F5n?-kf`)l^5dQwgp z=mk)oqM{If+s%!5B1!@KB@hdu@xCG4rFyH!anJAe`9;w@NUV#sOE4MhJ4Q~#9Z;VV zI%6(x458lb3EGJe{g$N&G7pgvIQk+8c+N~J!nG+NL9J3EBO-bH1hB#6#lilALzFR$ zzk5xh_(tsg_e7W?FEkiNo$VAOK%F;Z8!AZ%hzLWp04i+QVSsZo@^bXoM9Ez~!-K*0 z2Hb#|B3|P!YjcSm;_j}H?#Ai=71VXnv#RfXxPH@tViAy~8FV1H_bx!NNBB|J&jC{e z5yfGL&}kV6YzzI0LC)zK$tYh%C^6vgNSEdTw0~38<=N9#K=z0Y#FRTz64`IcxB?V! z(jSR+l(Bl}Q;{B{8e;-_;_CWx-)>yEWOA77|265 zNhwOxMR?XbnJ_HSrGfUrcR>W2!F6#&uR`8MI%F#m5 zytf1K?5>t*7P`vj0EZ5W?#?lX865n~y{A`|m{y~fv8D(C`NV4L$$!lNuUGbkY=pcE z=wq|x_%YhQ>6);6q#$ny;B2#S7#!1SJATOb%A)xU;efEky(@$_)qj4?yuCJ=`RnBL zQDN-d9;JhlK}&GUPOAzT8<~?C!fYO3cFpnd3!f$k!eZf}WL{@5G`O%-x}sO`w(ITD zpp$G%lY;Ns1{#qxz+6~Lz6SEnkNJe%vu1uP#p+A}L$lPjm$nFA^mSqSe&}Iz&h#%| zX)x#HT=jX777>??e<2x7HYKtm0$QKJApkygw#DlDAzS7;c^FuOnarWE{Q))QsWi%Q7|F7nI|O3qUlxJA98L{>p}>gcovRnK^)6r=lS8E<@0mf<%rv4&uAPC ztMR!=0E;B&S!GWfvzDxY`7s4#j|!P+74a?VYSLt`bH?OExF-;Vjp;i%@9(8xoMmG2 zOyu4WPOdyfZsQXc+bt**XJ~`8pn4c_ZK66Knwr%@=Yxxh*$8j(?KS6MkUNw!sW?5yQ1G_VZ4^u zdE77Z7yiw3BB_%zwQam@zis`pDpq08#(PgR%sF zy~NLDo_-goqt#{KBZS~tPL~L{c()#P+!yFGD5<{uIyP-j=Izv{)0JiYK%bNJEkSin zxnJ$3USqD)t`|52(|a=rN4gcGuvLVROlvJG2UC*9pbAI z6`AycRO`A!Ml@QBuQa?QSa+C&{N3C64i( z#|qQuSJ1t_n0n#!a5ZcTzQAI&I=>nFGyvM5V$6hr!^VHYm2Z8pQ%$T*o___Y;{zt{ zm!d^@tE-Jy+6^F(K?T_CMojSkxCxxrh_l5FQHOwBKnMaK0$LaPeFMfKlVT4yk;sC{ z*qi4V0B~%AXHd7{lAX8~t8&}+AeLVmV`!jy&(dJo8(;vl z_cUnX+qRnMUTWcQw8{%k^<9PkaQ1G`C?%&Q+NGe>*f};s?;M|$ z-9S3>u_e1p$^<-d?89mQZ2#?yNTJP&2q*x6JOk zUso3`ZLELwdy}S3$&Gq7OhI^$O9vTmZ!QJximyZLEYF)V!&BF!<1j+#9KZU#%Dxmw zO1fJJUvudY|Iyp@Yp!zI)a?0aL?0eqCJKmDwpNs9l~^$jGT4kGt#;H&yT#ufE%cwZ zWO%MTH%|gpEfh(YYvtjtWz#LO`7}^%%#y#Ht@UnR$voxPi+i_>b*4TLtP^eXZG8pd z+(|pVDUJJg&W3(XBW?Q9iR(X#w&od*@*f{=jn2Gb{i7Z?JrN!Wo$mD9ex1dxJXQrx z&7}-9>x|*UdU~Z8b1JI~88(%fZTmkX(#3X%D+;=WH@lz(1FuH>b0P* zQ1ncA0O$$@2b6!N46-(J2hxgA1Lepp-sJ3dY4{``c!cuc5Mb2RXigFE+UaTrgIh{IGvGM$>%{4QZGi2eQ<-}!`u!AHX+fnb4Z{YZhetY*bfdbO9 z;;0l+pxW}N6!fOFUzS@#vQu(Z2XMJ`dq?pxEmYWgo4S*UUx!uVrFbM`q8)!q`w%LJ zZb08gUu(y(|95JdTyDMRB`Xad+hKSXC%faAHHc}CMwIw;9BUf%cp2zQ!b@DSo;p4s zA6lbz&w;zF?%kfldU##7FgkWqc0HqW%*ELqXpK@!m6?;0_`q)#x%9+#^r!5g(eh~{ImAnWsjdC zWuC5e$N;%=31BGg`7WSacn$29NiyXvdb`mNVxQJ#wM|!6h5Z{OP`oIvX!aKIX{tb!) z6%lUM0!MpC7x!e2|F6Tqudf4ND@YjKi-)V4@~#%3YN2u&*+dc-@fU=Xge85JL`Rm8gp z`lBs!`-WGYZxyp`X-}rcp`n9-lCmy({E9(II-Ax`p6K(6dFo|`HNRNQ)}M8AB|K5w zoxA^17Yc$0>b(slQhC&qq;B5}TyXYJlKwd)@5t@8>&Pd(T~}882dcA~G8bSgNt2g9 zERGl*q-S?eP}aaym${($6cRnh>~!vVpt`Ei({^5TW&kcZF6>QcGb*ZJBF~2+`?#>X z=h^hGe)F<^;zWFXza(D?w7}Lyddj`*SCtdvr{|)(b6ub8K!po{36RzoC>~&zB!TW!h zI_t2e`}Tj2955-7Zje+7=^iaGNM7nEq%2ZIgV{~^nh%^XD=jiVK?SAg(`5oW? zw;kK(*zu0*dY$LxdTIT`?GkSJ;%st4_{Q1o!nZKjd2_Us6htzi#5Blm{HJNqcu#q= z_#*an%2)rUNMLI8jP(8Iv;ELhw?Db|EH^`G%*(QqFSgs?wck&it&%);h>o5-zwdqg z2~8bw@dUM*smA_%Q6=b%_ZIansEW_WfrXJi;~S0tOJfVrh}UB-?azPlg%_^4U$M_f z(Wz2@h-6`-zUv5x042@~b^;~M2forzXMle6E`+(oKu}m|fJN9w8==awqG240QhM2+?EdP;Aip7a|+GOY=2L+1Jo>a)eXj zACoe)S-HlgAdZ8c@Mj3Q#Bp>?bR8P0%uR8GN+NG1K>D1>Psu+9$Sl{>`7E-j69jd? ze&~chTUWk02Qgc3D7TUkk$eWy02HCSU8IS`fro4Bn6$j-xDQHqNzmALO0;7Rxm%kj zq7*{N2-nV88FtHlqW1kW6e2^^dpyCAWqt&QU&szsTLD)k<4Q1AyQ=RW(?=9%Q=I+; zMua%CR|)8t3dHCuD-_duv25WPUmGeK0XnL}Bh0uNpt3qx5l43f3&l`_*so3!dVPWC zS?MK=1fvDO{K^gG#;Hi(LL!%-3woY!0xmJ)C@;*!yQ`0B&eCh~XhO=lYAqittt!%m z%{r~yy0#LtO%a0`;#uAK_KD^8a}}Ma6D34-61W-q=>jd$0l9t%nui_`@Cky%I6QYh z-BLVhA9J`oH?l76Sf)DY4}b2~M<}$%l0Ud$-I|*|w5q9L9lL=7?bVZ{wUlkyCP{IN za1I)}XQs9zx2#?=t?NgA{V;qTw8T*)(jnhM>nSv$O>jgpEik7KJM3b?s`Ax<(^y6e zzUmC(qG+rc)TQnJzmWQ8le2`ArsJ6}^=iED;VxEjDSAW*CmXNJ7ywmfm)ElfBMl(H z#k9v~RrK>n)M|KWjA1QVVma$1_!otE_J@6O+jTP<;C4{mn8nkdU2f;9KbM^n#44pI zMO?RMbRhmDaI%wl=X5-7DT}WP${PBCg!z-1z^Ccw zcF6*6jkc5D>4-STgl+l-z6l7*%m&;jX)M2)j=`H0t@#OX_N}9;utb>~SDn`6ehkBC z96NP3dC@^SXB0nLixCK+f;@|a*)k?8j+}q35IYRp5`N4V1G+N2S)qFfHs+lB?YA4e z{PMA{o<~fqGe|3+Ds}qoO0vw}3qfu&`*ZdcV$PhRakOS~y?CeUOnAqDS`%J>TdyO0-s4kMcpU zvB;EoI234d_bmNB60##VCD%JdSv0Up9nV$WTy~gRycbC*TyNDBd+tyOs&3leolZh5 zxi3a7n=0Q`q2|5?c9i6<*a{0YhS#a?6qtj2SU>vX+f&RT3u{YL+tb5ZXJ0VA^Ss~q zUFu1<>bAyO)q86zJQCH~y_a}%Fsrxc?U#MAsBhzPG(9I?P^vPtT?P`Dj^CEhWcz)$ z=R9VT7xrxO$3>2tm|5UwL*dLjh46E(gMupXA-3)E)s=BIz)&Bo6Lz} zi4Tn)^Mz(-)9fGC`TnqK%Qhpq-9=eD_8L80d*AXxU+09$)BuiR@+Un-^T)=DxqE#h z;?Weyfaq&KYj2h4M2cc880;kGHz`Z;VCd zAKR*5P_#gdpC;BZvB5ZTViv@g=lgJV63GuyZ(Dx(Q#s<`vRmL^HtzSUGf3hAo=leU z96DY07yn+(KQyk&Uy~|JT+Z%4p;T98|I6FI#YT)~IH1r2$f!s)yyUUmv19;fJvq*J z=u#1AP^s-4?w(Cm0|;G+Ai5G2QydKno;3m@Rn`dWkffrb%)y32qt?xY1JAKi1qH0k zL>z%ytC+~mW(8L>p!1S|&`CllLm=oH=){<4 zbZA+azE`8#e4 z&_dJ{lCT!BQn8wkX;9gsh2k(xiMIN&GN8|}&e7K@JQ+2urZEE@Yy|vdMNfN$M5HPo zsGIP z{$60Ao;gP2v_2TFaFP`MI;JJ_7ci3|GsvxLd3l*;RRGCUJX?Ef z6hpNBn=Jd}SBsUHX&aiRP=6dj3s?k@GZ5#j^C?m()94fHTcUehn7VfVBsA@q!G+*B z!i(@D0zvu>K z;GITWO58D@OY%(@)dmn{BkkiY4)n`iiCeDua8~QoLkYRIkyLIil+3Qkmez&w6>0&R z4BAk3YpywU?nsHi)X`VAjGKPnY*Bu=0p*GfL}@#I)J%S8nUY%(NbQE_W#G9PJ*J6QxLK z>nJ9}=SUR);j5jL`xVL(g(iSWP!WjL^=ag6rh)S{xTt2UtIuPiq!Llg(} zWloAJZTzF_q@VP5Wiy{qg`&-x9Lm$=cE7}X($Y8MnBUSjFHdx5vLkX6aKnrkP_)CE zl;&**OmfZd@!Hhfs;1gM@GFB1;CK(=c9PdBb__F3cE+H-6Kz4L2$&|dK48HdiqXL3 zw{hfX6O4r1wCwMm)ty|=uMXV!^S>F{=I%rruv>OW#JF%|RlPgW549p=h8c!`;n@tC zZD&8N?=s~{u(?jnBZ*1bpe+j2Konm!?2usf$Ph~CWL(miDP!Ix-J)^1(+d5XCdRGo z@Ut#aE#=QIgMPWbLv{VVKpOy~|GyEw%l3Ws>)GDN7xqM#EjBq732t**1BIgU9L#0W z(k94AU$W1>SR@QGViek7P_4ZxgmSy?@T6}`NwRnPnHI#%RGyJDP?_fT*%^qO5II)5 z{YCNbVUC9MJiC<~OCDzIbebS9TvSgJs<~Vw>1G;Tc4&~l-m1rH)d@&598(Hs@y$jv zZ{F^RHxd>v&iH`0Q_x7;S}t_N_h%M=X}Yd6WA_%(*wp0R!~nmTIuw6XQ!1}?uzMDH ziT|;jN27UXzlJ6%X;S(`Tr9q+rTu#laPR#r!Qy-~q&^Pc5}+xdS~@PPaTLPjN8Dae z{v0iQd-^ZeqRN8pZoO9hdzfE$&ym@_WUu@Yas$y=`{JAEDWyOfJL?ilI_kw+Q1&uy zsKEUe!{5G>DwL-8aT5zGx>I^J!p$@i=~C-Ko@N=DG_f!ybO6DSF4EuSZ(u+?69m=nT-3__}CBy zF?lt+69O&beBzbn3sWZ1b5yyMvK)4-L*#cAgm(eedVJ!OB&YDS>DVds-Q$;~^khlm z7zKI|kB~yJc9jjWA*j0@ zxmga8Fy_H0%Oak496PKq{z;EZ2lIRm4$j{KR?n!hWYfs-cNJRGdq`FP2ikc;Zw5q> z-6x3_I{LmBOJ*Dl`!2(RPA|pHl{18EEhaisK8u+^w#^4uC@La&p&Ft&22hrM0RV5j zs@E~Q9fo;wQlj~g%b;mGSJ;r-E;={o3L2`{drYTy(#S~-r=h8rFI+l?&2OPz;KyV7 zt6yjUOz@ro1ky**6Qt7k8JE5l?J7z7`0dR%(zA5`m2Cv!gG?swg7rhDc>HK86t<&r zo7}R)GEI28Nn<%7hrrn*am(X?Dv==H@)dYugXV$(W_@J_Ie9p@n`9}W9O6N6U05t6 zNtfWde@S_&pXXr1vxSbR+moKA91OAEes!96WUv&!H(mU{Kt;zqkQl`gSjy%L(S4H| zU0;gN24?3C8S9cn!zRFpdS!82j+Q@6+*+S5dV_u9#K453 zC2jLy=;P|=mQm!3T;2!6Imf<#@u_v)lN`og{MeZ%OL?jDT*wuW3y@3AhQ+0xsaPk$XG^Dz+OPzwJ-K_G#Q-7`lVqIY27 zT^KfFzDadNrcUO1ip<`*>NlFrj8e7E zy}mbZlCrc=K(!A29}kvD@(bcbUeMGHebg$&)h#L*Xl<%;$*F78RA`gnEFZu5U940% z_))zvJ(n(hf_yM-bS0qFIqihD!yW3X!-od}%y8}|Nfhaxq z@4l+3u)#gJ**e8}2*{h-3tjto>#Xp{r!t;>lcO-wsu+aMSSxJ<)B7R*69a_OwvKk$x#ZV*0=V27dQy<_A>9Fw-WBCw}bPL74+RFV0J-*W;YCCeme2u|%?Q*h*F9{F?xQ`CPC0?SSTV6i( zkfDuu+GYA@oR^56i;A9X83eR}{&V8n^0i{wY16;df5YIbxLS_gKi7H3SXxM9@{B?i z@ZLt2ke15^DXLS(H*!eJiNgci^p32P%%X55ReKj>*dA-ua{0n9G(s=&0ne-g0Kyx= zfB%jpMZY0HQ>)?ft;euq1*)M`M7D3QqW$(bLjje2P4~?&;j)eG(OI#%EE?v|&;sVz zQ`LL}d~zhf8|xN(O6!07xPU;l1jL}Up?uED3!NrT*1dL=qI^aqvgU}Z7KZ;i^#@vP zR;#Suop#s8-SmE}KSSA{TVapC8+M0DqT^VMG`2PZUe8&hs|xXLxepl2JgCQBuSfhO zyDB8weBRK{*D01GI`Mrp)^jw2NXWzO;xXC~0nRX?!SW2_CpC}eEV+Oa*$X>V00WGp zhY~x124~MYa3sv=!_5x_y|~vi3-Xd?#voqm5pT2zUkgHgfU?HNNwPY zkNw5B6>yk?ef6zDcQm6N;t@}*^l&|8+qtgj>lYTku40i+XZk7;SaV2z-rj!Wz;vrT z)%e#i-g!tB8~DM-Bco1Otf+M@|6FZuH%U=wrF{KCyy}W$WGAN>h~~=Ze@BGEUQ@Kd z({%u9c4b`6EK9@HIuGH9N|{u33e1Ur!7s^;(oI}j(5^DHnE&F$<{9wtoVJ~eP|epUM5=p>5+SzgHPMRRrXcR;QRg)iGz6?H{)BY)q$@-iho zFyQ}?!VhHMy=KmPxj(f9pV_{h(`{McOs9qRl8cH%+?f9)`k|mQ*YAP&4+}GB`=O>&v#Y?|sH3f~;TXk{^knmc50_exI5{43+ zaik)(1#UbXvB!Qq*X&)nR_vYSic8F{E;-2@s|g-^je$8j8RqsI zchoB$yM#pZR$iA2`x?6~Xol-zeW2g!kPx^OVtfMyjdtqW=n=k)4zL$@c0s>iTgYQ- zXZiIE)=E^}%#D%OyMXCJ`c=2BL4)pxOoXHfm>}~lR2K3wy}A51FCGugn9&-~4cNn$ z%xNJcdo^*7+f+f7Wt?8L+c)CQmk@4nI9Zu%{k$m>LUWi@?-)daSwQ2ZE>XjMY$^?x zhI|@yB}x`ee~G0IJf-8*#+083Vm52~c|$(q-pM6D!iM%oaQC;iZ#toYC@(76rjkjs(?jQhP)=SsX@5WiDfA+Vk^=2+o%J?d#Foi z_E$7m@6^d}^K^~MpNTq92uy{bnv)hJ&TX3_c0LPg!OGndV(yzF%@*a&;4(M2&kDHC z?o1xy8>QzZj|4uQ)dpWACg8{jZ72u4r*UJT_KP7QvYbGaL}WZC$hcJF=j7BD80@?! z&(JARZ;>7dZ-@`JB0)HxQ``F?_v5%n?KoN7tzgkzml%b;TFC^3Sso>OLaTw z-xy6kOBb{IO_x@xeKZAS zJ1YspMc7{FOU2`NFL_=_hr*LG00Sxk@I7*|}7yXYqc={;lKpEzN z`9}cKt@4xmAC7X44X9VCRZb}QC_wUHNvqUV@;-{M&TCa_J{gtHUfCxY4uIFlhiH8V z6sM?W?Lhs>L9>!^gm~b`%Vf|q%ONeRXpwug3BpaQoju;7D5kFSTsPW_2C>}QB#gs= zWxkecM-_Bz7hTKb0Wu-lBqj5zI|J@|sP9nXm1MW6Obk>#lvcWiCUK}zS zyTpQUHa?e)J36)Hew`o7mvWcxbH4j!o%Qr^5b%o4CONyW_D^0WwxV#I;yln}>|19k zu|#dc1S<2+E`7BC?UbVWqz}8(33ze#06y;|;>!4#g7AZCB%u`PJIyQ47V2ZqyV@Q= z;#BdO-q4oTWS%HKBP*?*Y}%VGh>c2}lZUgo&nz9%ZjTMbHr1Mzz3*b)t%~%p9jB9x z-7C~`5SU(4O<^R^-QO6=4d*@AdSy2-=H66k zUHBOjGX154P4S%ila#Tc2vK(N31$3q;(W?PH1B_M7^}t~huMwO#GhyV=~Q|_gRthy z6YSrb(mRVW{|9yE+1eYf#w~t`DWT2VYv$kU87sWbnuBGUF9% zkra_^f?c+`#G7K|imxuo*_wUoW~`leHD6#CZgl#P8H}fCS27U54qumeQ=ao=Gm#>y z@*wSXa1F1z-3T=+`U$T%B|%SRFA~LoulCtHH;>2qnW^eu|S5)2%*yL-~Y|B5L zE`TraQL<|1341qs8xj}mNms*T-@iNdE!As$M>$i@Rn-8@G~|tjhx9I)Z$h<5PSLAYn7WHMde2zc0!9C0V2j5NCZ~SP zOVotQUb{#EWcdgQ09k-q>HGSX92^O52uH-A6K%j-sAj>>FVrH_K}OdBoz}Q3gt3#q zh`!<&^TY?j*fhzvhEuGm-|$pAwM3&?-T$E@TaU&u*0^r%l!5t11OpHe&PZRIxt|U_ z70(S^HRChN3#`tcRgSqzVsJ>38AfvnmMJKJ3o9Q>kDv?3AA(hx4?8B_99rNqU-j=e z-TZJYDcD2LU6guVitHG6QA$y$jB}&B47itA)dx1iKJT!K}CMo z-xRAJEUqiXkz#Z$ zhD-J7tH1-!vXJ})gscO{K^!bt*X9fHnMt~pBQuhI7s?9r&r&6qNLALr-$iR5BL!$) z6QI5D`Ebka0Lk!B&MZ~(^KIJHRxJM0iI_W&sUh!V6CY(dq2TB@rg7J%lE7lLQK zw@FHTNIpG_0;h7i;xkv6f7pyJeuSz~31tk=8F?nES!-we3nv|E9m)aNZP)MXF2*-5 zk#D_L%}1gg*ryq$$>+cZ)AYOV?uYJok;4U#iF~{BO;>|3rUeLRhRi)9g;)0?dufbN z0ok-Db}N3nxD}zC{0KHX`m^+#5HHFH_wgb6Ll;`mye1+z)!X`TpCU7iI|^HSZ< zx405+*CFQA;RCP>f@%TJWWHy#>I7gqmv7==zSQ$;(<yqG*@4ITd05n>{m8g zTYC6^O~6PfeFZ&0*=9S0Jdk?$XQm&#G>Lr1PPIoLfKmG6m?!cB5k??Qb^V|Ik-uAl z8wf9?IOxry`z%7z02PXYu!N#t$E{J6rXtx2k`i4vF2&Bf5uG?8UsZLEWHEq%OE*K! z!h*3ItKvM-XT1ub3m5=jd9a3fg>gdsp@vXAz$YkWeDJ#CAoi@wASxk%BdL=NwPO^S z`mX0%d#MAsDH~2)3f=NWIXlwavh2e4Qy^Std86U&NGhrRx}b3Mfj)WcM=; ze7o%dP`D*5<)0J#D=}5qinN20fYHfN8>#_+KGDu2Xc$>^t#4cVm8(^bxMgdgV+O{m zOZlUpmPZUMBxR^hVZ0~rg3Di1brZovPjWD}|GLe37Wc}E1Crt;oYONd@_Jo(?~g10 zICQ<%mnhcSa=28&uKy%X^dQCS9oSx~lwi8PPs?OWH0PRuOY@_Q@RCbDm_5AhM^XLB zPKJN7bb$PS9B>i<)GI=~16FZ@Q~H<((zk4HdE`-PF&4$dFBzkqES5X{lNsOQZEYy| zS}@ix=Zoqe9t9LneHDr#U;KbQdB^4igW(O+=1QZ@ZQsY!G;w)AIga%6gU#pIyuCeo z-)xuvUUhM$q+?&o5! z??Fc1yLPG!wmembZ>+tsaj0k{Ea${?$8P0Ida!rXc6n)EY91`icHUZFQ~fY6ECEk= z9vrsY7xt@ZLj;T+=fnPYgPeDbhxoOIp~SF;V(T2=3}?>F-t@Gr;t6dIDEfBy{@$p` z`}NqAfC1Y#)245(*WA$E$1gg2`=W^R&xVbz6OXm{U)UcP`nhj6RG50G)SMU8^9)7H z;zP_o#NpT%`*^Im`t>uX-P9KeKO!$OkI0M6Io#51+jwx#q7~oGewaPY?j$MpJ~t-z zp(dNZ{W=P>{UPgKVyB34lY$KqS|t2X{=@YizWGUy6uDXH+TSEh+^+OKXV1V>+oXTN zY9+UB~6MlC_kKgzS%9r&j2W!Jx? zN@y2%`_{T?RD3%UtKy>7;T{dvzWxe&>Jagz3TvO8sR|F{bOLSgW>W_vLu9SXBe)cVQqdv^NtIs#@BpvCEC6mWJGy)b`fkWdC|FS(>-R<{50ne2 zl35BRP;R61y`Iwh96}1$LjV4yLs@SSOg4g(nVmKTBEVe1RKqZ%2alnGvp?PT+A`6t zFl^A>145i+xR~Fd;s;T<$zG%CWIfbi1cGp}#uU&YA>zoW#+Z~>O+qh7YHY(n8`<_m z^US7N3+~YHpd7{e4umvfeMK_agz@xqfl#?cf{p_GWTKit>!irLngnk68>j$QUuH2@ z7{CE5LkwbT;@*OP*wU)(X8iCUqMY0^ zB+~f=a70lMM3v$8KNfNMev(^`0&_GO(IFxg57ntiJo9~%T~4ln;G1JF!7m{yp(g0S zz0z^fp-deXb4m1!5tGn&>`_9BFD@|r;SeYZg7^Lxh2-C8F248P^z*oJi5Ec% z9oXJ8wKmZCIH@om6b*S;*p~|wvu@w0H9prR)bOz?baQnfe^P7L1kQb8$9PUA$R%d*5L<%I;@Bo zb!^Cb4`y;q;XbYlZKAAbkhZaM*G(bAG+ZN>Svw+#p0f%3MrI2S+7%90U$W<1x;BnH%j zl8O3Ek`jvm?KpR9`_~8QPeDiQlw%F#e9OxpCC0V0!p-e{hbZNT&#LJ_9oTwu*XgJQ zl+}V@H26?86zfLy#MnM9PZb}heokTXL&>jWRg6sjPd{Nzco`-rxN(y;3!)h3ZgSuo$b4ws>9DlL_bM<5<5@=mW)_-dd%xWS>(Nw-+Hy?Ae_~ef{0! z)1y(s4CnaY$^*C0AMtxJVy1T7;%bVYScH)`pXZ26&AE{qVX?dvGZtT~G9W9HMN3&4 z{>*TQyp{hb#pizenJ>X8QO06Yq$D0Qf63F_KI+M*rA-*!-L=5G7xiq8XPa_Y)dOXIOtV(Z<9Z~5b?;2{c=!LYA8N6Qg*~dNp}eB+I`rLLEo+O89#(f10vvS?-xN*J3tX5Ituig-Z#Fnz@ku8PWh|wC8OPf+0y~NdEoIHlhn*9^%C%S4zqKYkf zafDDJdKHiiu+<}LWSTMTa{a|;K+gb9eiP%lf7VI;?sr?VX!UpUe@E>^fib)h1o~iV zbo>x?hd7)v$rS>rv>OccASDWBMpS~60hq5>82Go4SCcDx_^i`twqyHcVhv%#(U?&5 zY?5=N>e2#>nC0oS?4`2L3tK{)Las@!3s)nYufUkuv;`nrgL$FvKkvO%e5hDaoknY; z1#`Ekc*xL2$U+2bzBmgt-F_!^%NCs>O>Gu!;Y;~6Kbi3@d{1N0$t}+atC%kHoSXu< zWAbdqlpG_%h!d#Ev)Ra15x0j8?(d)zB-VZ>1NEjOybdEu<}CH0dzCYfAo0E|KHn& zsyJr2bLSr+CU`#&XcksTc&=)!Q-N5RT@#T)6K1lRSqmZ~R_x?-BAl zG9=mXjCFU)H5Pm?ZuvcS?@5Id_SRFbxy0rD+55T&+tXhh|I4EQ{;cj9+bw(tBi+nH zA9K+UMeHA5XPtyFI@A~;LS%Ia%!Yq?f@DmXG2Vs37=2=sLmxHzPSg5pPSxTs>_Z|`&};?YlS1)g zZ5*9waG-=v1Jh_LLG9>f9N|y&BPX)5MoSmYC=%*Zpk)n!6*}a&fcEAjK|0;3r~HK< z6gdu{qXc$sv+mfl?+~ZZy$s?edYPHm=W?&23+8zH_hU(xY@d*qnb|w9x@ScA2UQ38 zi&HRueaB%?fiu#*(SEdev@}X1;SCl}Ku~rrz&QY567(AIvNp+z^egO+n9Ehs<-pMC z@@cP{?bK>N)e5>Sp}DGw-_=*j!jL`3WPHvQ!R5g3Jx<_!42H?GmATs$MWDLV_7MQ0 zovtL`2vvMOtvyHl(wqHW`siM&Z*&SdA@iu`0Z&&z!zH2uX=!~n zZ$%F#4vLbVH!d|rS3qH*x}4{5x5>?~3Q;MG##>vL6M4iru0kdyWf{6TDWtSQiUHG( zuly4Z`(#*|97{Nc4$8=gR8$TMCV7O}KYk=lqncCqnX7xhmP!~!A@D9mq~?8xPr03S zd0kZUxT-qO-CX-s8pWg}A@%Z~U#rwV)fj4V4>Wf|4t@UfUEvFiET zgecfw2bhiWst=Ab`{S&~m0pZ?lg?s0QTd)vJ$sRiblR}7J_~3@-9nP+bVglsNiS;9 zT&hhtihqV1L1rHN4dY`<#|d8=zpaW_xNq$z!MO4|RFIbT*>|m}0$)q5viDk>ue2+( z40;CAxN-_IGFod4wF)+zOruW=Sgsj-8fBykC&`)e!QC`?Z6__{YsoEZbB{$(Dp-Z`kxKORUq3$BSog_hCz|A8vz5j|c1R2%YFou{ zJ)M%y+lP0((s-4cO|xXaqugWZck4oUk>$5M4GbvX&dnMD)#fxrL5^aYY#@?Y~p^njUf`6hgKOn^qd`m0?x7ie2 zmSv^$Uz4Is8)p{y2&W~5RsM3%=vR5Q4+GC6J3vQGjiQbCiKe5AZnt7bD;+fHSr;<2 z`wgBV(#0%mU2c1D921-Xr4;k`r8hJkILtnG5HB0NaadwDO2O-8uZ7!XDHkj?97nr2 zg>ZL5CpI7e)`YYivqRA9lbivgfc6q>lew*F{DeP;!q4rF&Qk9U+GyzZe`1hw!|vrI z65Z_u+`3-IRl>#4eZ{kgiJe&$DYL(SdQ7~;I21FlP2JY6>9HzXcp0D}0bi8SX}W-7 zV4`poiqNt6$xC#hC917O`FO&TjLii%yFvq5M&l0_W}dZ9=eRSAVof-ttIRyOZ~v z$WJl!WOY_%I*IjZbY&La!ZGlcIPKzCywp6UvhxeF3cOXJ(J?&~U#UsjFRw--N9DEB z<4EsZc?%boc2ooIX&0mZ7KjB)Or4l!Y_GMTG}U-leYkYUH$>B8_44M-t7~N2UB9jt(nRlm|xP37!#Ykm}7KAP0CgKk_d+29#UjoYx@8l08Q4VcXH8`pKBgR{zE_SnUXy7l?EjvgFs^xGkbpNcI*E-)_ za#T3H_j3=K!t?Xr`*umZdijTpi3vIS1eaT}?L~2Xu8X1@{Y~n``;i^zK`+WON61CU zD_c_6;a3LjR9o2ESSJWkBLTr=$H_23!)A!+sMythpVrwv1riTePN9Jq%}k7>SUWZO zFdAJsFzp6Bt$a(FMaww}2_w1>azlAbOv0(7*|??ip)+ScWqd$d1IKts=i_k}iT}&v z7+B{q!!&7bHOafMr-~RyGC8Y%-9~K8+}Adp8yGyu&rcMDyoFpOKD&0x`d$#3B`%jE z>6fH=4Rz{qIn9<@<6Q;+0?j6u-QJD-n35r{7HrM0&}!2mMXpv;fSP6ZMp$4L zgam79(KB|J3QZ|fte{I>`yPHQ5cXj8t;+)a_=_tZFN1hK6G1-o9DB4;)qsW0)H!UF zWl)+L_L%o{!n5vwgqLH&sHjhk!o}rZaQoMI9X|6#oL=lA=QTvvu_iU?HG$17DDEXB z0Q`hP)q){#8|Un$65xVo6RAr&$^|!nZG)EY7b79M5y8)Sc2Vo^47Oe+?EA)@|7Pl& z-D#F;AzIwfY0S>6dyA78j8t*+F7@zWW(nr!>ng%ETwEe%2GrvcH4knvpd+arycsj;=1qQs}7OgLo-jR@@|`5fbI zN*)%!Xi=b=13Fk>j#HVYV~(1T;25h}Ux%N^mMc76fn!+g@E`gbxJeSnOr3wv4Wx$X za2}KQDt-0ODIYVkXsfF0q)fcwwmPO9)w$E@_q44_cZPWlCwI*$QcSZ!0OS$~A-4|K z<1htzBLkifCDk#6v?OFcyGqai-TsqhV0k6;+puH88?~Pr0amy{Te?qG(h?iVUl;wL zXaxWRg5!sJ+R8^5*Jc+BLBI;yvyNOGr1q%O`pm!BFf@P#OmP1IFt|Pv{pd%KC5F*~ zLWbtKg6j=(9ij{CoYW)p=8rJyo&IAY7?fGajyX#Wuvyaph~1?WA1Vb zpeb~2e@+Irl)8ZVNI=Oa-mVqk3l2iITLU)Pu~r`urqtSblky9U+y zyTlxYfqWEp!*FE8+FXfxd-+4ZwX4SN;7L=9cU4&#Md2{oT*3Q`k8>5DVrbHJ^P1t( z7dL;uG`0CBn_0V!SF)vPK3!;Em<=PT8hGG`klVckk98gZ^W$27#@&egVQs*+h`&i3 zlJV57*xj$RkAjJ3BI%s{GrM1Kd*6i1vy@6JSVW&&{Le!{mi9C&SoKx5)D?^EaOaCs zk<{#C^IvnGqFRLTa+~=b-UC4&SrNwakJ?jw2VYtXyGcLqlF=XLtMn{S7e;%yF`uMo zbBd|OU{j64{j&70o|LX=9uqhWpQN}WGkm1HQ_l+V;~g(t4Bxd{mtiCP*U$_h{8cAu zoadYEPvMX2+D~Oq*K_8*n4RYPwcl>OHP1HdTQXetA0rn*iB5fA05f$<#CI$o3)HIT zDB`uY5Ybb5>Z^CZUDCxA6t@1=4PnL1QZN`W#G~G>v}3PekA+)fl`eF@#H{$$-{1ep zgpW=dGD|3KiG>y0)5*r&W+~WD`mF0E5rKrZE7kxtUNoUIoApGl0(o000j2^_5VJv6 z2&)Lnh}CkPDix7A!ec#B1Ev&DI_3*KIGiffILK%R!wJ6^lA<#C*8tv-g_L0N!0hw= zu@o~SHWY5IrBC$hhHzA_1+v=!0@trk1g=hu&HM@zFF!A~{JoV$8DpSbbBsL>;p(B2 z#m`^J{0_&mlgkI4*dTl3aLr zQBGVc86hQlmU}~qD|BSW+~fK7Sjlv`Ns;^j-&N^wUnfDxLo50BM_I0y_`5+JQ4X&{ zGzVXbUu=#BpW}}FmJk3{Ft!P2>IOBT;PWA z*o0Vgh@-~Ed5_6ybH+kV;#VWE>lfo|hc|i~))UiPGJweT#(%n>CRt|U-1sMwy&%WF z81kPpIxC*v-X10W9@3x2Ne^z}@gL&87d_bw7eZTgOuGp;W(CXN52J*c!$uoZjtFkP zvs@JbcOt?kT@E$yrx_4jc35@*JD>^n)^&W)mJUw=sR_x|0!8od#fNt&{re^OqKrq# zx<$D4@mlOH`VIE zbkW>b$9RRbgMC_OIwCKue;`Adp@YTETy!ycL@A}|bOHn2@=LhGKsaA#>7UX6Z7lVX zv{otrqC`>C_n|veIcMj0m)A-}%j+`pN$;F!+tq0%%gf(F@oGM#-n^K5W%E0e&2=Ez z((CjkE``ji%hZYv&}R0c^nLJ#^(nJS9Y(|obpuS7%*y?`tP3)p?49Je(N|tlNVx(^ zmIi!Wx@i#hp8+EeNNZ@=nK&+D03KhaEK`}k)2}DuVc0Lh3*M=)BMG|)b|;l)?w$3c zAo}oZd*2SRns6@0XClrcLEO*?8@}-?!5_e$v-odjzk7PVU9MF}wG5CFNkJAwR~Cdo zsL$~U9RAS5+=y{MCcyA>8+H_n_o}>c0A8fI zn*fDUo^!(?D&?)OygD;@doXyMgsS(7B-!HZLrQJul%4x5NpWPY*_FZ#asbPnSy`id z$7WPof9VGbd(_uy&ECbO_!OE`Uj!4wP%E62y=$hqPS9WE7}*$dW2!KI`Dg6ZSp7G& zf?ZdgB)s=;ZZdXhZ`#ry1;ZcZ{?VjvDDIt2?CW0x2HV0~Ipr@U_St6FEBaSxs!Gm8 zdc`gW_8k9%d!i^fctnf1lkG)+d4 z-zIyJc6Mq}LP0h&(crL_S%c6%awh!HQvGs>cZ9m5*0 zPO?Q|ilS!V&%MqrzAdW33``(y*awpy}_6AEe+=&O+(t z8QY6Nrn#z-ff&l58rwx@*$^N*$Hxrh5UW2(&55v+&6)X1JX*nXqMTY2jd;Z8$jNMb z(#_^qzgm{xzi7Ft@)9uCm|gv?=XYK-P1~M73@@|WOG=4~XeqT<_o(5yY`e^8FYYEi z+?VLs=s-J4>Bd9W z@HTIR+23+aRP)m=X%sj8T+f#OMqat=&go2(`r&81e4ae;jRJ%A~MOU-KVC0<-yRRr2LIz1U6f*wnq#!coJ*~em~WN<(y+Z`6$ z1vG>PTcmUAU{zw}*ZgSuE`a6w0e$V={I77)@l>!{p8p2$x|8prb0z27Mygv5h5Vvg zu(W<;`3aWtf_$bKcb2d9M@%z3Xs;MLSKF@0@QbSiFjikxGF84Pn5QOijNNe#g)7qy z@AD~qX+#qvLlMi%hB-4*#yDFmgqdhdkW7W!(k1N&8{N&Us4^u1CSjj#eLXhbraJ$q z4da8Pk1hU#44s&t%-^Zyd5fI2XKAy9w!EP<_> z&OW}AF$7fGMg*_4kP<+m_Z$$jbpC@7vg2_3(>sn998>>ucJd#K_V7sZ|KsT#9O~}d zKYmVFTGn!{<%KP~mX>YX)^aT_w`|wRwr$tRwr%~+{XEb8`yc8$-_Lcu->+BaN*2kc zqnyJY&Tnp*3-NU(#slWaQRyva;MHQAM5h za9CsLgjlL;RNs}hQgy?@%!hw8h{n;8&H)Z;mVi>=D3LtlQlEyf){$UqX~?7G+6BsW zD(9Fdh3zjC0P18C=X-zr0^WedO(K|h+tBKJ-sJrs~4{+9B-we7Nmz@VM zXj($@y?Ns1~qz922&*P%$)cRc`sT17nW=V(srgnDlXth)&i&H?Q+eT z?<@}BOo`e8qX)MimL~b=CqPkfruc0C0oL&{+y-!979i>I_k59jL+T;<3z7?Hjgn0b5 z%OE-)=mYo#Ge23)a=2M1XA{Crs`B)8`g#5|$1l3Br>CiOCI3IN@oyG#nzg~)(MMrN zWnLu(Vnf*-g8y0Wkl`<#WKQ}17zyBIc*fwnvd?V$=*L?dHnJANi&jl`Mf`{s+=g)Z z>w{Sz^Y~DhX|Lbg!}2?LSJ^SX(#-es{@v7+V41V|p_VAtZ3p%+%1J zfP<>?GRh~xw0Si>)of2H;JW2{pzj-fgM`||#8hPBym)4Yo6f?*G|<(m+-A<= zxCj4sw#{zogxyj+e}sWK!Ha-KKd`8qu19F9Bco})nCRn301Z;f)FY|SyodmdX-Xg$XpD6}g$T_uLL-pH9^oFAR!b8~qewttQ#IbiR& zK2h#cNmIsr@ykbl>3-d(*hw+`_G4$g+S&`M3^NKOWsWEk8T)UA!{1q zKH}A+>FA&B!7uxHqh101xEr`gZYEFVua7+ccvaryEW2Y5CRiDK;muSpbM7f;Gl2;U zghs&`b?rXl-Xq!P!QZ16?>U41vlQUW)Za2?6NacX%V?Anvkl80XTr0P!L!53uA8Lk z{9}(cym>?3`d};M8G5NEfFFb~?1N2d+%o#X!sOzEieF&E(YhD%i8Drdyz>e;ODB1Y?N!yoHi{Ta1XPHxf(IhjN5+~r+um(Qx;_c@DlhWqWU z!LEgSlaX7S9O!p(LJ0`lSE*)+4j;L&NZZNoV1UbJnA5g9FniVM#vfC9v4LI;!R zXhmTl$SX$?^8GhhS--T}5g0jfQlJS3b$g-I$hzO+Y7udk4nMQHo!#uiC3S!IOg-fj zZ6MVe>-Y>Z_kVhFJ1ibnttx=}O#%mcpd%^pd`RD#@PdHp>M4EXsa$FAMv2q;nx%v9 zO6P~jHJ!IMOwu`OMGB*Y4}Q$@d3lqoh!5>!RZ=PVaT{V+GYVRwQkkFn!32`D=Y`Ce zYqar;9;4_^-Z9fGxqla5mMt_pOz_vJ+O9-NZz-LFlch0xm%mN^ChLvf;!OD%B$FXK zm51GR#B5oAM;Il)6`_0h63^(&aEjDdkVAhfXP?NgIvi2q^msQf(e@}wq2rbnQ2Wef zdk4!P<8%crlJcstlkdUhcv)`nRbV%!>k)`S61IsPC%QrK5Ej+G;%~bl&G!av)a9>+ zaiO1NIwP!nW^`+f8ta>jhjv{u$LA8HVdkjFwTC-DR(ks(e3g z%>BO52D3z1*1FvpK~Z{t1X|N{;=Rai<{~(9F0uMV43t{GEfKK+UI0%U+%zv%e_5ka zG3!ObqzIrlya$REhc5tau=ttU}sKid$Zm1hdJEr!UPlb*dH#PXRnfBKCOHf($Y zv!8DBuPp)plq1?BzC$YosB#B!MAH^HXuji4=k86eqw$^+g@q3h!?-22p@M(N)DX~- zjw8UoLH?Eq7gIgpUuAOF(_8eqU}E7?-t$C=DWg#!@JjE(IC@EE6L;J`M#4PFH*&}! zsJ6T!v)l+GjlUww5ncy|YR-xwTt6S)G)`b~R)sOp;}=*yzc}xE2F$56WAJGgdHZ9r z=jXD0JT4H-{ct#kl1crZYD=TK-Jo=EI->|XVg zQ@KbLCGY?U!~5zgdnKug1|V=q@y4 zQhh+IUeT^ZRAaFzSpfjTxH}FTOn0|)i9HhuKK35{uo|V6OTdjwZDZ~uGC`2VJL6s= zTDSD%Rx~`UxQSf`uknQJdouXx@EdK86s*pWKDV?JcHokAPtJx{L+@tFe9@k+A0hk$O|OhfQXgYDdKI`{3=V2lO3aWxweZyEVM z26nuIw*5SxYWHo0bx6mH94;gOWFHGEQ@q|dg1u_{tXmCxC8_eTP+yW41~7{j+*N{vlSq-YS_@n{0y)F#<;FiK(k62nQ;w+Z9P5mO0z-_XgbuMFKgl zQO}Fx-!yQPJV~orZNg#~;jNcQ+rt2!6kd;dR=VCV(82pjGcl1o2Qb6gTIFt{gjWV+ zo$pwYb3>U|AUfw9z9bY3)Ed$yzai55Po3x2VQwg|um8|&QdU{XAWcx_%j%w!2x;_! zx+H4@t`Swd(LJX8J{Z(kuC$D6KcM5!V}j9Ex?f$F4m-qrr%e89pNMT^(Z2YAkD7|kbVPc0t z>*2xIb#EpAE49HZM8t$tAhYwwWbcC_`-|zNx2Mj(E;vknx|3AtXjVGO>!cL@3|K&5 z6Cor`|08KJ+a4Mec!*~X$ono;XT_Jf%)j7v;{Z-Dd852Zey|d!jYRx)! zP#Er!7_u+Eoe>lH46~(Y@F$u4{##+LF6X-YS#f>8j`+lW`JKrTYClq@0n+^Wboa&T z)h^QI87A28wRLX!s~lG4egJIefng`po4_Cm7O>)CpfB?tP!E^`@D_gfHI0EwPc86u zdOMuN4)Wk1&?TMPfez`>Re6V0)C%SeAT8$^=nWC0TDsivi|nEXS8kqrUe8T0r~Ql3 z-0S~LpY&=d&>FFeMBOqRA^n{{8Q-tHYJ2&QqeWQ#gffYooTN@2mjWqkGd7d z*0^6=HV7?^3uXS;DdwF=#o&Q)wV83v{^H~F;%`HUG@pFfhRs@%h>?iWKAtua8ibx#y{bg0oJ+oZ; zUK=kXV^(39%XKuHG|t7=TIO>1CV;M;YOXn8vNYG!B=hk>SiXmEN*t5z?w771!7MmO zc71-%pYB#<#fCS0vHUp(y&1PoBr|ip6mH7W*=?1j1Qv(0A+h^|v-}@K)*A!J=us^X zf`anu0LpECBBC!&*Zfgxf;B$fRIjIe1BnZ`j`ngw9B{D3fbyUByXhQ6oXyG=^&Yy; zAHruWh4xC^&!>tP>eGuGjzP4U&I*rr*2+yIg~h8ivBfTDr3JYrAf0nQ_gqWdN4RGi z&lwGA_1d53H|Mz;=}U(Z-mkYV>pI0VMX_u6ld`Y-qYCRqGj)dt;@Yj3a@la>Lp~Gg z6iHsg`E>c3z5?$)cBO!{FhaW@iK1D2!{NE2#P_!FC9;m!~ z85gK80bz)>shw(aPe4Y$^~x{X#Lrd_2-Y+!<{Nze`)0@LzH=AktwDEKo*_a`zF$Lb ze3dW0P5jFas}_VC?XpGk=CJ$yu{sO@Wya!qrbVX)IGSX7;gtXO(&4-3AdMfb$K~fp zNV#o1D0 zKh*T#5&>{^T^_2S`O3$W9R(=Iv$eThHP8?{5v*xFwKko22V0>5semH8{&7j%!h<+z zFX~jT3z@DaE}3Ou>4iVsfw51!-Wo+Om9B5Y|9B;7KBI8T)4WJ}06y!e7JZ^bTV9{J zCyuSh@D00?CKxjqy+Gy@^y>t3&6V4anW7J9)d2A=qA_^Hh61gfU_*;ev{CQ_IgyDg z&Mky z0<&e03=;Pa=k@|b*R$`o?;`ygg}%s#b}vBLiT%&YTV4f#y*WlUpmaQgjgq$%N6ZV^ zc>g1c1kk+P<-o#{0tS2e5Z229ax42i1OO<9Z}Tz)h;CnEyNloOND=OZ&_nJ%E730cb z?`fG`P4B$v%v#kL9D1dl+ydIiOE}sWak%(%t{;6GbxQYZZFQ!@@FMiuS&C$2_}un+ z5_Jz!fy;Mnmzu>FE$77+#|ck*dbZL?C{r0V`%ZkPkxR0d@-yf)Sg|g;Lk;apTVuh^ zkA3sa_V4Y}Hml%AI(F=MccI{M?b(b2j`Y^(QiA(-@DneDm}A)J{isVk0{n&C{(~SC zwe=)+F$(%8kjrn|F5(u*Gw6-Cfxzd?-~lMR=#VD#>~t6>&On`hzc1uhmlk}8;pNg$ z`Tw3y2jDLtRA9W4Mi?924>%d}r;|5BD9t0cNz3Ee4d@5mwLK_IL5vycAP{bjg*h89 zDAY8;Isrnu&5BK0ks*p0C+Ca(>v+`3O!-X=N&ufIh!T5A4U`cBXGVJag$VjDk*Pjs zoRIoIo|At+da~_957TC>3|@_;P0LKkgMzRbg>;Nc8%nE6Ux)T6hEzX+4Ki}G1Bx%9 zV^QYxuk@_@(W!MU9vrEb6gpnVY)`lY?op1pEctc)(?l`NLwXW3-yeHOzI$HCi?yF! z2nOCGo>O~g38MsdoXz?@tmwwU;4MICWpPka^!m|3S zo7Dddqi+4_MF#jOf?aO?dw&*+LSo()}&zDzBwu zX&JwUqw`6z+o@u`cae?%YAb{dMT2EENVZag%WQ0+x?sF!cbnN_s~YXt6k-3+Y%}^E z!Wja)VpIC~7mPLR{h7HiHio+VhP?gQN#n>0aaw7j`ofn4#$#qM8u_XvMB4mAL!E;h$<-e>URla4Dgqn%nnOp}zo=nHJs&ZR^PkQg2#ISe^ zn%eB|O&hf7JepIHAy1u9H+u9J`2 zt}`51t#Z0=byYW)kd?CfEr+#>f^=vV#oa#QOOsDa^pvL8+Ss^d<5}nOBKs#wsvryDoskd;fZtu0BuK00T+uxm>MOD^KYXA)I=31%J0AHLQyu@KY==i$oW(fTPhVc#2-)+5GEZCrB!I zE{n^F=|>=+S=kEFQ;A(70xj4pZrB?vCZbWRr0!TTYznQsKlT$Kj>bu}L$>EXO=7tAfVU3(g?VuJ@ci_YzgxIuc%)uz4GW z?y+Z$dYiU2i**_HGq<~bPbm|Al=Ujppu~k`2jurnq2VhfuFTiND4$vn+q-Vv)aRGp z@K-*be!di5{#H@I}|M>QokCs&1s~N`I;9wa7E@Nuo zUc>vND(2h%{d>_w$1jkjiF~U*PEYDypl6sKj>x&)bB1eU;j-(D|NJXADFqi z;c%1J{D*1X7W1oXL{;0B>GoB-rWGLVz5Gxp9@musb7C4`Fw%en29fN!h=}rIV@#bNdcP6z zy8S53$#Gf=P>hM;!X&cRRp7^}qH$y#>`-|k3!FPSgKlL7T^w%L?E21eY$d*#Ndeg+ zw6U_LkW`aQpRp_V;~?zKY2gmE&3iNOFfw=t@dECe&Xa$$1)iCqHqWk{&s93$_FEth zCSVRGGhXEx@mU2ry0STL zM2i)<8Xe25sX7Y_xzpy9`MR1Msn+F0Os8{=oU?Sq`NS#9TPB-A;$EAXM0?E}rtiY+ zt_+j;(e_*qPX$_vnSYhz8h%KZ!H<8G>(eOQUuG|xeX7jYAZb>5uCJ)q zP~@&JRfvAqvPMQ#da&Rx;dR!V=MqU@i9wOe7OWG=*Qiy{ZhILgpj{|PzGAb?QK08n z!cz=(DAOo;DLhqri>)7Cy+DpPn^ro%`;;XwsS4T!ba^C&$9r%tR(u6N#VOdQY_M^dK7*p!p>(r2xlFfMd>I#d9q+=?2Jt9eNSj$AO&L%g|MsVQtPgmi?I4o{v}$F* z3{yllI6{oSXMPffItN>d?1N;Jy_rx);0o>;6#An)k<DtK`foMOhY>Y$`{;huO-}42 z65}L!?mxj;-2KI78&${9>nZIUVKvOoEEvC?i*rL_bsHy?PU4irG#Q<3JY;5ZA67z6 z|1SMXC99f=pg8OCVswkoF1{)zE7u^8IqP=w#hH*(@H8k&c{w}x_HrZU3G~j?wqDqg za(_}*kj{17Ho*mYdphUj!jk*QrBFx%Kq>& z|B>{y=`a{erKSaS@WdYxlYg|ZlrxRffn)zItaBVV8? zWD4~%LN?j$$dE6yqlN*)qkUjee?HY%c83AvE{@ZLL5eVjRhy9(kG3Q`m?v{gsE#G) zYiXn(Y32|cX(<47MMXne#3Ai`Y~149<-o)9JyPkm$tOltvgq}sctQd9QM{HR=pGec zHWTtmi|>8nEsVPR_^S3STB|ra>Mfze^J7R-?CAFd6D*2V1*J3rweG3=ux5UwLt;gC zqJ*-1#$V<5k+cr2_7udp(!AEbVNE?+*O=;I?Z$8i+!9E6sW|m@n{HS&yWllf=M1sp zV2<+q=qMr;g7cM@Pn|b=-4VpU1g9QpoM^U{3d<)2%NuW>#MkBNsRweYq@e!6hprL{RyC@#KA`kv?m zoyBEZmvg}zNI7?yiyq3^rfL3%D(=@=v~zd{p=&RfOozjvkti1wz7ia&wMu@JMzPVr z8|}K+UyB=p3imd#67LFN@pQXCtq)k5)#FCFDj^eObX-sSY%Zp3wW`y`@2*%_;4-tg z=wIh(W*Xss4b57rBHOp-B^k)~C@jKnRrJ|eM}AX-Rk>1-s7!je*ir(Iw8YfHEIXBQv2>PFG&NiUW7T} zb~rTd@9!I^nJ8TzDz@+r2;Q;>{jVbk*q4H)^z(9gJcT()6neW5xU+BrqG&xO{3y34 zz206P!Izu`o_WCn_aIwg;Q;U_Kb-3yA(4H=j^I-D`tlt?@3SU$$as9ux4c}A|3y0} zm7*LKm{&t45rH@YPa_MjYA|mSV7WifFSL+lxzDz2_xggf8Xoo#7PO48oJqIR)F^b% za60_?WU8$fdII;aRLafG&NC={RlUE%vb!wL7S&Y&_0VQ%voL6R2o8b_>}2n@#w4b@ z|BLi2z3O5zI~BMscE^(v!2jLBvU_OItmdHqWiEixMmO3vx`UGOatec4bsr8EqTy4% zTjBnyc}x8e7%;@|REJEbQlZ?L;>`9HRr8v*5~tdeTmP;?jDO|Qi$cocZn5OhojfY5(X~+|i!KRs8ATxgTBe(tybJqF>#+jH?COs%hen3BW&imqL9TAHb3G%0MoY$bE*ERpy(tSYN za$Dxw*|cN?my^7|EH_Ahx!&SJ9x2|dtU#hoK^*%CtnzlXd;5O1GbO9zDQ|2sH+}i_ zh2awYcLmdfSqi6DvzPg<9QZ~Ev1D--j;CDkcH|@6tXVGUAoN`pZy+Al?-v(Lv=g8= zBs=Cg$w!vafQPg13-FZ!$eYO$wO-}hrL}p^BWNZ#rpXA5n5*}a9h(sdgtr1~sDrN_ zu8Aiu1p^bXDFZkbKb+*~;8-yMO}FC0{B1Kf8$zp#;GAJ+m$2du{K}|Oigp7!nl~N> zw=3V#b=`iA9zRuG9JG&6{g)MB3IxGd+%G=D=RKK;ciil7-l$4I+Nz)DbMk+G4V{qO zu`se?k+J)>U0XP5^CvvKwwh6c?xbQeWeZQt$ZXtRUx?UDGJC2U?nj1w)JuAPG&D#- z28PD?-k^_>q~IE&zL=hd2LsOWApA%$e7A}R9 za=f+M)Qak_;!28nAZsSqAzH|~D*>?`Ea#?MRFXKNGRAZao#x&oXYMhI8lpVRL#L?y zNC#H(gS=lGHMFt6>Z+Hp2OYC_yvn}rb@*7{#Rn^Q*kfWdXbNGM%z;;$ww+$LXvoFV zr&o>0bG6#C>QdQ2*?%0_JcHUfntte}t%A5AP*1O8D{X|#f@{HCo-Wg@pa$<53#Z*5 z{>2K?WomU&9j(vsS>15hK1a*7E=`=}^*$#^2x=g54|X$EVNmz)M6-#zxuwb_SqN+s z+_P+tGy8c})pgr>W70&~>M`5Gm84XaD*_yBXaee4_+znq79-`6Z-53d3}^aIHi;`Oe=>rf?O_MAhurs;wjDB)j;oO0RA`mAzbUP8O)D> zX}pnl)F*1 zxrnTQH0RNTc*U~^bL;r!X_}en<=P7uAN6w~5jumOTO>_qX76QPCad|=FmA|%6ko~r z5O1l0_h{=(8{O0c`?2^cQLYH)9&a%aoP9Z))4opI__L4TD%}|Wa=Ix)OFA0^nUyrb zUw_6cKZx>Lb42TO5JmknCHelHl0SVj#dP7kPy8xK+dkaS1gCRZCaAmO1P2UKeU*|N zOW7cLY3rhbq>$kKEay!FvYa7 zd)kF~NR^|27E5InYY(L*_|7MJqNhtmqB9LjPjjkDjei&Q;%LhgB@<>R5OKjB*k3_M z5%}tg9ivVIr8N&h-JG00b3K1Pr<8NvNdNo91{U|Qd*`D&CKUhUe)y7Nv-j~WBSlpYe8^*4ynFwqY`V5d;^9A}?Z*v}ADh6_{g~t<=RZyQdn*DSp z;hch!kR(SjA3rKf>9A>`Cs5=&lmFmd!L->kfJLg&fR6dqjMbt&la(fIhs455MP9a( zZfkqrVx#sE%oD@G{F}{euUHx@pTQuA=A_I-MCT3#ahLEqMvmq19Gz3R9JD$54)M=!Sd%7W!RvTozoho8_%2ThhtmU5_GVxfkitlt{;; zitSPqLu?8b!;0lWuyu&a9@6}bDx#|&P^NG@UVap@mlumvoPoRCi515gLlcx^5S44~ z-aNg$U#p3=T0oLC`z)T_SZ#7y;ZF_L*&`laPW%q(Hm907mYOCs_H!J4PY{f8HCd?6 zimu|4PZkda?O|W_TwH~OHEbzNR;Z6uLSu@PggI_hs@;z&Qx{EsrJ+l)vOOh>Zu=6> zK;7cm0K?|AU)}xt6W;gIOVALhdtKz|?Pj#S#W$mzrHJ%wa1SLYW>IziWLmMp`K-+K z30bwq&u}hp8J?AxNoJS(R^@&?-N~unjwtoJ95er$oS_D*Y8!q9NbT_Ih|LNlI-Zu@ zZ_N!dDUns~Foc_XF7?NEIm$!H?FS9)(72abb1R!qK|Bgi!V&z(?y*q)?8+dQc_XItr7f7B^>s|a8#GYb2 z0Gh(v{a>-2)T!bpTT|j`u_VHe zdE0!qoir7xt$EJ&Wl@;1x?oE0C}<^L1sUdHf&hsy_1uvv%bJg>2JHWQ_p$REK8ygB z8YW+c0BSCf*2LOAqALb44su6_C$2ms=t9bCcC_~qZA@+Ce@&)Zkw$f$43Ln4OZ|&_ z2)Spv13aJVqw&IrzvmGSgCJ%ZKp%%Ji}MiZoKM!r%})`M2|9X4HIsuaRnI5R6}9O8 z4T}d+hLosUE-uxvJtU)5x}-zR_|GJL2K%Y(q2#~X(~Ikak3IS%o(`I*?XdDV3mhdYZkhjd%y z242n<9i=6$NeKFHxea4MW}h*&<=@MnO*j`;Rtv8-Hs{~(4*}>)}&D}EJt3Z9I{L*k9BY#^$JB-Dbf=ODCqt2SWvFVS>y zR5_7PT#i+@BEr1DmXI)$goZt-J-y7u{V2-?ySKazLJxkIiQ}i`X?_}>vXgzc1kMbP zx38N+mrb_6Ro{}gJw4pi3nzZ=L*1{onZn{~H{Wbr-RxW*WN`nF3*ZKz{qahi+9p_R za=5rNsf!0WULe^8fH6Z!xLwa`6Zon1NOg0m{V?Di*zo1ka=U);#0fuad)nDm@``2q z^Ylj$n7)Tb-Nw`ax^=Pn?FEaVPrt%LN<1$%6hOIjjr_*CSZwBwD2A_}vK~aBooyr- zt%+vEYnmITHX_SrTjyGe*G{zCwDN;=z8>2D%4jgcwoFNE*t3LuuRvqlOsc^ix0koF z>eO^9u3;pPK2K&qkl=2isjr4y0`Uzmbi=w$^>aC&b<@fUwL6L@olBH!@91ddnu0== zi}HE$=??RAjFrm4B`L=p!uK|XhgLW8UbF47Z)E}$*i5@$@n@v(BcG3tG9H^-?Sl+n zgAYfy-ncA(oOG`t60WH9SA$+RDEBJVBtw*_K0B!D+Q;Q@jspuOtoVk4m!<9!xe9)|q zB!!g6b$nSVWu}YLevBcDNla7$11dPqmr42p3EXHbh+nm!OYWs&w(*tZHltN8T~vC0 zxvd|xIM`&t+9k$|Q!y9fi)_Jbm9rF{WCg6L&n-M|^TV8VIk8%8eGlA)twdqTkpm0T zA(qjUlAI9`2RxXg`4k03kzU}xMMsEYhl)~TU8eDP$4A~?IC8%21&d-oqQ4Jr_Jp!{ zz8q5xLjCuMu}jAR1(y}aZXY4{7aMrSv8)Oo&m=&KFG0%RNpWRIin-%UkDJIdY3Hy5 z_-5-sI^&u@dO8vc8C$J>G`7A+!%fcW!3)xOT|n6heD6=b7VD0%wW-w~3Nx_U5#*X$ z0lq6<=XL{MH1^0oP*kd~JKC$NEYaC;=x?RKF!aW4@Av(O_p&MeP@f!eheKr=*O>#+wc(LOV%7sB!dm zaJlmid`<~b1CP(axR^r;JZE8&jKj}A?&=v%Zq10-MA|J5_~NPB`L(|$ zVsU`MA8bh1aQ36CiJ)4h`AfCTo~b+bKKk+-p*T0Hf#8w~-bC}f6&(;^)%cm>9!#!` z_nG%zJ$Q>x{EYFA|9G#C&a2z~r&*@54$aW1Ig#jv+@aVV_w&WYs%)jr1iBTc1CT(3 zUs^Z$%PI}R2aF4HG)ai}itfna z)CCs}sp%t*fd!WV4IPqW)ky3IyL_2j$046KoevWJCPgf{T&RTgiK@G>0jG;(`mW%>gJStO;~j+Gtvq$BEA! zrrPq-n;q1x7U8=*ic_p00-Ap8ST9QX@Q}esDf04wBm_ z5QwGm;>RO^vUHz`)-q<;aNZw~2Cq!{L4%bYsv74)R$V+M%U3Omu8QaYIH2hcQK*5m zQ0gk5+t4(O7Q?=`%_3&G(+`3pMI#8Jh0MW5CfVNSzOva<~XZx8=O z*vZ-NwhK)MMkOdV6w7AaE!nS>)s(tBJ*U-{8}KwpIlk}V@wBM^33Uwq=5T2-s-7AS zD{h{Y*@)t}^_@xI4MUUxlKW^iT8K>XyMq?Xm0plb`uHhu+%RX8{nuA6r^Cp&B6$vO zXDEZ;%~}4st_NJtoq39`Nw6?I3#&-|kqk+V)acCfM*73WQc@vfouj?zLB9q^xS2m@1|X>Gsr5qRo6 zcwQvu2%>gT_sa(tc#k;p6xc|uYP%(bG}w)JvXCl_GoxmTQ;c3L$QvvUv#Nb;_78X*_M(!LG3V^FUa?!V4A z<|3XkvhNGUu9gW@&e)v^4YdhmvCdm2KF+cIGR2b*-82m3jy%mprHEQ2P7qg085kY8 zwo1iFN@NIa{jf%D^H|OPQ5rCZ8qI}NjLWX9>1_V#zSJZWt!f>RrI3e^_2lM%CH+tV z4a(3GU5kV&m5>-%x=pRLsCh869TL0(TMrJ>boQ^LFSM4SX(EP3D_6p)a|fKz_M4EU zB8JJ!$%UjZ_vP6SFvyQH7-5#uuKYn>b}?K9ul`)FhAz^)ifMGC1Bcp4^d8d>$zlKt7@Fn-0!Gc_S+W>&RwjE;*Bt7}@Wq;zfhBz&-@8WLfEkxKK0)f5-Q z5eY4mYIuB1tUE!g*LEc|Kx*pkR$VPN;}0ty?H@_Wir9~(KbL$dhKkgZ{)UMBp$Uo5 z4Xd-ZHTP-jwaYBEw7&|0|8P3pjK=0w>mHe2< z!wu&Fw;PwcOw#X-s@O^ASq_+wLa)jO@Ut8-+Gq1 z7q~+BOI2AvF8d}b9r1$MW6Q4!yXl(gef5%Y&G;qid^UppYcL|A8-WWh&M?2=%lORG zeLHom_XUfXNjhrpefn82A(a|KJm*_mxOO|?ya)kt$PJ-pQq-jq7N^Pzma+Y#7I@5s z#wSsS>g8|j-25E$ERfdtuj~lLZz_yDj94EV1P~ev*+JJ34`;SgxqBw4lN^15{u=Wq z+58Ndy^Z4{XHy#gpP{DjBz~WMYd299AI)HNl7fUc{C4R&N1t8`zkCw%{hb9Zh+7|H zy%p+L+96yU;f$G=y^96RUnnKYX`9c#m13`$G(<2cMeC8qZ!{}u94#S+UVJgwSR7R z@K{83aM5z+o3VPU)%lXOhp~=E+j*zPyDt`S}~C&#N{j1in|4FZwV&^39`6jQu5;moMGsh9jY2}yO~W4 ze)Mkw8ZK|{azuE5#=AClVF1J?ILM1;#xTSTy zL~xbAydtF>ce?f$7|u}7;W81*2a{^Iv!oJLoYZRDr0zHc`OAmd?KdSxCD*>tZ#N!o ze~@QT4KsSrOC(fPU$nm+#8j=^)+!4p&+28U39uTbfDg2H3a2Mf4!fgzyqglTE3WU!(YVh?tBdt)|vd36v^k`esnlyR{(IXV}{5duA24NjYdKY6%iwKbsLtcrMq# zjb?DdUMJG~L9`GoH={6fe)U<8P{$>AOu zZPxfP6{@gu%I=62hBD*r(>I&Xh_NbqGoi``J~&^YnvqtyVZiO$+1C3g^ivIf+qqNr z-QOR=wS9drCDGZK(V10n^#mmlRBUJmuEv6=Yz;mxLCDKBjwDG@NpNE*ypu~{)Rb{Q zv&C$Jl*iy76{=s#*FC5+VYfI;2aPE+VymYW%z5j4*7=Gc5{wtQV5+?zujvnCZkJM5 zixhhfDm-Dk!Kfvrw*eV1Ljxou`|@3u52aU&MtpoDS_qX@nZ1k=e=16nu3&RgiF9H3 zULXPNI8(|>us&U?`_4N?qNt#d zCr)s@P^mA}c1RA*?Ql4qf0eS(wNl+0Nqvj#u2$ZNL(Fow7lM6gMT}Fxb@r72 z7Garxv~rIJ?JMJgr_@%FcT>I5ye4}EZ%JZM`#S$>))G~joBteAiwbwf`?>4A#PucQ zd?2M)xc85%&+afssTy`LMaec=4Hpjce7}MFkJ2Qk(jPa)a|(N*EJ!Nl{aebGOsY~S zrWNW@Np;CdB$}t9%%6#k_D+OF z?@)Se#|5=)hz(q^^v24e@mWQn z^PG%$0x)^KOhSdMs(29EHyZ5(>iR!4YDAeK&IlthO_Yd%C89ZcQ+i4^QP`nkC~F;F zAJ6%lNI$I6J)HDeYqfdemtcbRMsJcov0Cy4No9ul)fk|08FRTyr+rmDL&E3$kRJ5W z|K7Lj;v)gzev+y2?hrMR?{x!h8tzF(X0qYCh-A9UuNG;#g{GFQt(69P5d0exT2jtc z9|=L9$K4<>0wAC9pt8TeD}E*HUEvmKPZdd$n1$hEMu-l*mR!sX=x<X%H2p(4Yakc>4s!%SKt@5ekPpB1@*nQkt_*4Q9GdZ|A;!rfJ&qG>xYvk+qNg$oot&^ zO}1@o(oEK5o@`I<&yN5{*2fQ7YDw5^K0Ib2o1*mCH-z7IU*iYR#_%8#%`VFbf(^!Lzh`Hy zZo(Gl88thj0bv)nDk)vBIy0QX6#j*rN%Pr zIg@2}F!ohy$JYoIlFU7pR%)3CK!sprFKiI~UPMb_KaDiuDJM%BPw%T^XZ7m`8^&|3KfPJQg`E zw57{KAW4iiVp_qcTnFM-kEcJzl4)a#E?@=7co_!8%$iy^L#eHU5R5AgwJp@2SmA34 z%&|`~^>Sy}LPQp=`^48nec;_G-#N_*-o4bTN-`5)*JjB=UngpR0BsqD8#^PO@!k*f z0tbpJx>}v>pev^L@(=F5WpA{@7ri_N)ffV;GX)CTl410Ye->5eQV-w3_g{F2)|tOM zW%_zZBB}dYw|UDr$w6tj-8Q;P5pn=!gEq#J-ZU2PaWu{+H7g%vE9tpxEbSPzKPW{P zRwiKV<0k6^TnTQPE%K*>0@&PK!%NeM-H6s_7Kcf4Lf(?_cnHTcCi8=-WCo!?5BF7H!t1A|`iqz? zlJ;f7*qR<6Bmb+Bm|5(gk5e`e@Dm{Y*DZ(fhdinnLh~+g zf77;xB_E)KQ8tq*np4KyM;xM}v4x+R8$|#%PM1KUF6@$wJEk2Ug<%aTW2J?tN~9w> z-5Qh_N=`{>9CQ_?Zhr15u_3MMbEVJ}n5Vk2byJ$M^$A z_HOz$YAx32IR`io;Q8Y#R?>+L@l_ED?84I0r+$O0Ab>6~qMn%3(G|hUf06zvGy9=_ z(>KRRr`v?{tAE&B{&M>dBFad6{zlY2@}Sx#i_Sbf8qz=L`rcJicH#HTzoVq7P;cxk zGo(cwFXk$bM)0U8Qk%I2@E7a2>-{f9BU_M1!gjnNz<8r`|a8W#!kbn}~^_c}So zajDw2*S}fc!#`-dn?5k|W_kjimHn=_jh)_44DHta(HQ4iOqA>>%mx8g8yI7VOa>&e z%bK=z+~oMSYU)xyIjct3!hXcBCZ#tKm;bs+medw!&r+D0kluMwRKxhnZF+_b`1RF1LEVu1P4kU z)>c)Co-3e`~Kd^qLE16i0#@!5l`rAxm|nZ zSz=Dhm)!#v%;!cbQHk+%DSW=K(^ah+2s(8rP^R=9sIoJ`?&$MT**KJsHsPG6eTWEn z;P2ml{1M>(7Hz%cp`h0)m#rVoRY(jfD!Y(fRDgVTgqb5FrZW?%@!NEm zYT|KZ0FFmD!`K@HAzwi#D>9YEja;)X)=NXHv+HqNFw9-nX@d(;vJ}&|pyi#4AP`;Q z0xom%k$7o#hJ*i(U}9FpVJo%QU_)jEi<{d&^ERf$$Dj*0=fXrS`*r5(%%c=(GTC&- zlY;wHH_T4C$5C1glWo4?dZJt_!D=x4RvpWtL~rzS8vp12zf_UyjF>m4ZsD#&Ac&)L zuDI-VR)ub9YCU^47{gAZ zTTCS3sL-Ci2JH4BdMBj2b$S@7`;4k0wATk_Mou$T4=$tH**?_AE_UbJz}m2&lQL4SYv_tof1uBFSH)=`h<nTQ}$K_n& z5tk>XJi^!O9bQ4tMPbRr+&}{2CJz4PDsr-0Cj!7e21f*QaoQ1s7YE>evXEHY9>Ov+ zT7fv~GkSkSbYttCR>IGYY7eEoTC+=C#q|DYSm4AoQ$0Mex(LDHkI-p#6CR7XspEE_ zfB8ZHVNdA1F>9o!+J;Ch{C$>JQW5v%`^UR=fnyAJVGVaXj&+HB!~>1iaxNQYqDSrE zWc96Tmr+y5W)p~RO(C(rKFu7RXfIT30JgwS8ATY&70!}G45cD;=p*9+^|J6tC{ zH?&OibjEeeEKET!W~Q7G?D(MP_6r0c?jMHl^5I?cK@M&*=4lNND;UYIKjLtsppj;c z49!f<^z{r*Zp1x<4kIjnV42R`##+Np%@gicgS#cT<>Q73Y)J6K@}p06~bvizw>Q~+dwco z`qmPk*OQGnO?--2CsNMYK)0FXP>w@|Jb^Xcaj+?suT`~Peve+VIw>;aF}gwS`bXHQ zS*6Q|x-Ok+Yb}MW_8y^1`6o1V7JH_7ThdkOGL9F&t~cJC#a`uHSDBf>c)rvv%x}Z1 z+Q8Po=o#@x+KV+G-tVzZIKR}%7d^Z58YfxZ@aP>rK#`dN4Y?2tFtNK2L&@V#U_)Or z;gTwx&J(BlM3^3wMMvoqL<$YPUhm9JU(sIMKXp7Ayq#WtpnkmVim3SSLVj&I@4s8- z{gTB2x2;}E?zRTFBjS*)sRH}oQMuvsDgE(sBg73C-YsHt+QItrOITi^_|U9>$1=0Q zjQU%(VQd@ywOM}-6U|Y%PCL7yLLEn)pDQemozlS0k9!%tMil(m-vt(v7DRD5@i&=b ztqlwqq?hp{B7=>Ok8o*EbB(7@x3s8N3nQr4M*+yW{#Rc{e>JcfC>$WDge&L83#b03 zuy~_#Bjq3orj#BCJi5w&U`TvNcRHU#wKrTVuyH_hrBQa6o=cj`iZ$wY0)XsT)jdF zkV#o?ovSQCw=@PdWx^I_+zwgMnj+a% zD6D5hf1a_w_AG-ah6SbI#%%7ZLj#E(@)cl{nX%t!r<+)oXP@LxwleuNF9f8@AG{SD zX`b^>c?A*dHeC~mF%7F~EZxSh(u6;Tol_lR?4qv!Ywhmp#L>*n2tQYCI;JG@zRD`w zHP^*iztcfY{JSJLZ4Tvpvy!D;yz1Po6=KXl(lGK>C=qqODc*j|`T3u+We2=VIYguK zK3{sDn;Rvya(YU7rJ~EYxu$?{ij9SE{j|^DrJLvK0H&9AEu%^we>WZrz1)w|>7Ts+ zImROcQS1&o0t-0j zfdO`8qV7H4QCZSz2gVj$P4>4D?4ix?zT6C?YoKtL_ z$zPb&jNT6mFZ4hWFRx_c{vGiP@!HJrymZaY;Sq6A9k__i?Z%7OwMmp13B*wsnO@&z zpjg+|OdWBLDmK}@(5hR9rO_% zW9OzVH07=H#vs*qL*pigo4{0cI$6MK8pHOcOUdl$i#@Ny~0k2XD}So5IWKJkyqPJ@aQid zEh@Z^D4`|V5DGa$Ca0udFfU1FF7ZORgQ3Btrz+O&gn-={)uXTe)ILL01tXvZ_(Y|l z`8~tTp0+PY+{9vTF2ZlGs8Sh_15P(`%(;G7TqGj@0GEMx*zflu3^{4jWMUPlgSWum zA7u1-B2uI@#IWIb2++uJPgP&fU(NESnQl2yk2z()*F%SS<9SVf>AEO^k{m*Tl5>ca z^;ff*Pwg=_1EQy&($~*)-utH)ScGOqt)d>c!E`In)g^UCJfyDQM* zC_CLzfkv(n%C#3mbGENeAL8WSl@4~+g5A!h41)GDWta#z2^nc4D1;fl9CJjFc^{|@ zP9_Y_mP6Oc3=YMe$6H@R>T=to71AOP7upOYHSi*KaNz73s1lImPL0Gec3i*dq30T} z$6IM5Uhmzo2v)Czk7y%Z-$hstRR1&cg_w5ufxs7MWdK%2_In|pU1kVW`<}S*oArIsoBG=mzqEKiBBIeGvftv- zPcl_Q9X56O*sE7X~g};H@>m zNr#7-i1(-{5OPAe0+B~%Wiios%n2|KBq`nBq3jH}arqdBw{%XZ43x4$Z5b(@xwx@d zJ(veYDjv5Sm07l854oOh50$SHYd1%%NJaW$6E}g)U<8~f@%LX^w>^6REeW};km;@7}v2VvyGCZAC1Bdl?>fKZV#;N*D zI|;J3tR!-PoneD&?P=ob!kxuTJ|)j#KN=gM|_vV`}`}&exb(&ebE6W1FsVGbSSkZASHlVf8X{6lFbd+(O1jss-tVrqP< zLjA?HWrk*B{3mR;+4CS5#Wv_u2Itxn9~1lsPR&0Q5*5=O605A#b;CihMIB~8mm7o- zul`RS;N}+s6ogPRqQ1ZskJU1^)4#8jrzcEHeH7Fki3UT=2~frX-OhTtVC*F*dz` zb5uatN>;g7*$H#`=N+Kve9`3*;dFb|AKnNIXYoWrz{j6yaShJ01zO|j_Z661xe;^2 zCu5F?PG_g9YgyY{Byv*(3NUJeKrYf5EV;|LA}}p3xZ9FDoP&v|QqxLCGh7WRi-wc# zil!%9VV!3dem7^9xFUM0T}&AS(H(0L*@XtZv9vr_Z$-7vuh%2I-rM}#4vfQRn)n#` zh`IF;IU^(auf;GTGK-sG+~2mR!%^GmK2@?h!)5 z^?{k*?!nFSv_~B;MP1798z*>i2i^V!=w!2!abk(ljc7e3@KTnzsy;jXF>K^??zI3pP*&*4pMZC;+HLs-p!97c+Bx4-XjKX?+&I{cgJI_Tk>OnQ$cPM05 zJoPxj%8{tVDaR~J-Xv&=1ql;}skt_w>_T^J=zIGE>T1k;*8@kUPEMNc8Z$Z3s5f;# zgd?bo%uG7(Vt693qLOn?Q3o-!A){9=@}9h8i|E0wFfD`|%yz6~0A2e9*f8Y6cQ3Q> z7uh7~@fgrFA89L{S-*IkjPLi+#t3h_&DBuJ3{`yKLRRF#_fM0LRB>G9&s6i3MDMAI zeyeh-TzfHE6-6MT?5r-$>9+g^-qwSBYH{VbGJ*;hpajdCX)ho?iLl~)cNOkxYuIS5 zqZ>|HDwmM9(b-3t;wJSsrM)SY))f3u2zb5TO9MVV@gj6NxvTD*1!-0ESv2;*tBH#a zPu%%=VwQxDskk+6+|hPCy;*}Wg&?472>4BuM_Dr5v+r$ND5=SdX$qHi3mi@)ShvO-`cZ%1jKao31Wk0o9aSQXm@qZ}wD z)VaDuG^R2_t*xV-UBoy6wc}bI2MugV2ld?h`FBy4zi)-*z_KhaZJV=|F-&peTEaBb%4GoJZXlfmL zhJFS$I6(O5bUT!sML5%H1M<|(u&%ocsR3k=yt;xfpx=SuJmg_dyBF(oJLJ)kz=0^) zp5x=NTyPpYDNg?<@hom<$doQIc5pvzyS2WZl>z5v_oejuX|5^fY4;ZCX=~t@nW$Gn z;J;&ux98JDD$%su97f0rbXOd5vjd_qr5x4Eo!>zkkja!=0@if=(qB?=K0!1GD!e3z zzYu74L7by{adv2WaEgF-I=kkTA^?+Di7s2&ZL$bMle&9|%8ZJh&wsV;j%oc}rd4Ln zETD0e&s{MN(iky3CMR)$CMH1Q-(%ELq%p7hfgJWn6GgA?VzX- zsNEN8mc7fqs=R;Y-p|UX>u)F|niCo$3X9OX+j0rKnNmZra4O+#&jt%6I(P$gtt|&R zD;r|>0C|V93`*K;HyY?}$=PD`zo;KEAz?;yel$reiUmcncx{{0$mixiox@SdNNkbu z2Xs-1Sdo;HlS$-Tu4a8l_=)xwg~uZWg#}=iX_ypL82PG0+lO_LiuY?xSGGfr`q?AJ zT3`^hhJpb|&P64;C%PtHHFnp+AFv|h zrIhhUHdcH5bl1IM9bmOA!m*=9^@zz=IXuWTRJBlkL)4b67K^eJYOOHmIOsJhGSp4N z?i%c7snMo%AgeusaBFV43LkLIk8pSOt_mMhk8+~{HcT-g-966bW#$%x;(#7e9vKX; zEM}zPEA#TFs?ioD_>1c)lKz%k6vzpW1VX)Y7zibJ{J)S*Ju{>*cf>Srg zq-MogfBzFcbXsal=Utv2{VKY_{1>-UtymL(ytHG#A^v$5JEQCKQ>JS=OA7w7Q;U)BBnm&ftpK6LAU;=M^RN!zhTRC+g za*-)}z(r}?e<};X=vwfwJiE~)V2qFFp5*<^oCsMsGvW0ude{#@ZoS`s_3?i1xpyuT zE^A_?PTstaI2k+$z(HCT5bJb=p&iL~J8|pD^erHB~ zPrMGF{?SRKe<82^hL*95}=3syB}4SVIl{XyD;^vfA#m4 zP*$~v_42vZ&GgaAt4tNxk}f~HhbJ^aD+mclOiz+VJWSP{VZ}YXcbR}Gp^PMGOy736 z{!Flni^=kFpRdJQei}U@0mQ>KGLldIX-C{b1l!X51h@9||{v;p<4&JfRSIQ1K4C812cmf_x?Y$=F-pc;4V%T1h0KyLE_` z!pKlm8Rc!(p6j}fmyLp-;m{A^u)Q3LR*5U?7L^BCEhV%Vh`E!6%6&kH2{tq&S%?fE zNG4b5#u*9-sPnqsE2lsMeP3X}SB7$hk^vNC=CWcVEa}1-f4u=-hkv575RX#wq#^&s zzV^&?OuY1=TNet~Yl@rO+j_rem#heTT2+35xO^Phd2i%1r}P1kjg3tMvjMY;Snk5W z2Uk$cO_Ylv^<(YXaA>7eSywCcZx32BM@1|QD7RPxM1`{r{BVgcJ9dg--E ziLmbX_4#%le(Jm(KcO2CaN)ml+N)frQ?tDF!CGz9OVvm4HMg)!)kM%E>gk$a`g-u* zq*F3%f(HKbRI9E`z)~~YtE}{+L~bZm3w};1-uVj(AaN;bR!xCkKQSl8%?ys#8sgjj4P_&o8Vbg{;_Y zv7rp6PbuzM)q?))w~E(Oaqgw?e&)YM-ha&5JX$-mL(mh#+?>@niz8bSFUNy}$GN^# z9By~#rNv@L?AZj=;3?m@rKH^ch7qF(k-hUiOz*{n(?;<*otxW-7-tVZex9VQ8@l8Z zqdO@13e1nCI@)V6TV0mMXvDPJF(wZ&1dKdcMGc-+Ww<9VRfxv<-;L1zkus9RDB;NM z#akWkQ5E6-KbvRki+07YIyNmSz1(K05DIyYTPg^4vri9Sc&6P-+Mt3eGa+F*sdAaw zphfCN5xuyO3#AVpN*Vz8RxJx$+?E>^kjf7tgXkl7kx91rwJ2Aw+d-wvC5D`0kP4Ag z*wb%BBd+XMH@)Qvoh*uAiV#wO zKYT-SvEOUfDJ$exEIsymk{ix*LF3p-ODpO;bnVJjrXL#Z2lfK~nh&UuD0=^r0;7*_ zm5h?T8^>77#<2U}_Yi#n3-B@E>cmBDw}0aT?l6BxD)!vZ+P#2#s%?khLTk+DWXaXz z@2%S=;b%SBm>`CV6h9^X1cM*<*ha0)-nrJ)gPonQP*N$rvV)D?p*uf6^VjT-stZC0 zFG+v0O;E(>^f<~NLsJ4;WaOP3vt-778T&@#T>a~~m_zTOgPaD(zX1o9q;qn%k*&a47&QaW|3nbF zS>H4uu!kJYvH)dNGT1+{^tGkbpRgmeQLL>a7f>Qea&PHdpC;Cgea{kaNHkr#}H9JCsQIxp{)p+;=wAFVc^u z<|cFpl+B9(Me@SvNYb8Id3`KH@dZ z`RFSTfjN(TFI7S16dg-n{|%*%^AR9L$*8w*M{R%YP^49N8hs-t7;Jof+OZIrd`3>LOY3)7-j=I(hXZ*>gt}luL470rl{_ z=<{!LaGLD@5Q)f2Aw>n_WNU>7l#TpZwsw*a@tkYO8p zKmSLnxVfyG`DkCvijs0cSSnNv*$sjeq{*M4kEqwk5~(((bOFGii|HGEaVNod-x z1R75{F2?V0)1g)qCV~a%MpyuukEqpPJhIf5~L!=k+%?yG|N}p04 z#Eo-}rOxqLCOYWb?(>;bjXDtDn47~4%_iBHTf!ZYp5f#P>h9tu5}W`}ZXzeI^P75D zJ2K(pB`De!s`{6qm0;4CRdz#<=`9!TplY?g5&CO%6(pWIW^OGKYPH@(5RYxT4?Eav z+bz`(Tr_*|&dkCBH|qQAH}$uk92HcrBgm&ZP2j*?Va8feaREbyygfZSMats zD(JG;G2$7cQ=J^|$<~xnMvgVnc{4b%Jzcf823+~PT=Y5*BV(?gpCz7FV>`S)uA!@p zdmuS*Cr2{9IneoRQDBv_qOWB4#$v?tz?d_xd*cw;)n)K1_|Gr9_J+hZLQ+8$Qm>yY z&_VWC`8%FDW0*Y!AfG}c;twc{H`VTcAfrMAcJJb+bLuEb>a*x47WM5N2-)yBQFP|Q zr}ab6U&p$zEpmFW2?ArAWC`kT4(esa^~`Uv1FnJx%e~yrqTloqOsgVC?4Y4*gU_u9 zvl87?AX3h^yarEG7BzM8ZlM)7uj-H&JK%RUm&NRy9Pu$qhwG#obKDq%S z;X+XX9N@EMAokt3nseGBI_DU8>Ox$3EZ#2UA1z3r=>Lwe%Jzm8FX<;%^b$geQ4P>M z^9Gl7&S_Jda;=ZR1JIXM(_FQigBf?(QExH4$jf@)s9b8t9@9qYFID8H%nYI(A|)^WzP zBvt^P(v%>tjh$j2FOS%vUUGTYFHif?%)e@AUNB>4q*uL~A3w-sNQYQ-Ix=au9nb_- z(EAxb(L*xCTs}dckS(0GfB)HE%k(*qR1zTG74qqp)16>v$Et~#3I@{*J1b3a&P!xQ z9@1w+&*_BzfKizKTBffWxh;H;dm=gS&6}Z#nC4t>$-I3Ox;RgJ^gy&!LbRX?07R>!B5hJ55fvP)My%70wrs zJ7|IV44#XV|Hv<{|3mJ~# z1_w=fI=j5BKp7h;(FLGTU0u2pX&{P96;NwR*j8vmYY6n<=9_gwDfw&v)Q;xAx|4vc z7~UIg!stZ10ewf^=xN4n`t4E|IBrHIiQ3zsYKYFmf>${VpmeZfOGh~k8Ill)eKKJp zLXR67ka{~3))A^eO&Pu$87`MlVGG3aV8RPEj2)(MoMN-fZcjA0#uiiqd+Jo^fLfPXC1+C%`vQ;%oJEcZTrM?GG*q3~Z~t zG)erXcMk5f6zE(~z;tY}i}mDO**Ra-v#u$E6GF0I_NWVL>0$KoYBLFI6ev6wFl%bV zokbQ*THQbn=O2*uJkvYTxw~d znLb8?mC|rmA(Wqc8NQl{sanBx2STP89vM@{8-fiw+IBcs_GpXX@ zv{l$=3lh~DhP*K~*;380!-a>>NQ(N{_s`i+?@_}2m=L$sA}J+!7JL$!ZcN`XzAuzCqVFMl%FwPp+aA5B6fJ-vwVvStG`U8@ z{8Dj`mLyEwUE}k_76<4C!5d;tucyL|6gr(j3vmCZ%%gN^2@*y17JL8(FU6+jd)9Yv#pkn=Z$vz2R`?8i^AN@30 zZ3jaBcf?KHfbT&uI~>i$B*hJ=iUjJ~pA-x`{8JCa$dewH12S8wg+dyXkr>qAW~@U* z{(4P#5ty*$j)2f;t)>1&=zl^l6Ov(eq3}bj?gQnXH$?OzY4hotFM?IVF|SKXMK5O# z211QUEj2lV>y^K+u7szH73jtf|?HiWoKZuarjb?so8e_j}1S`1QJMK z&(w_TeNaMKrKT??f=bgYyM(QTrvF~!ciZhakMyZoe))lA92ykjdU8fmtHd0!h5FrA z&vzygBjHeBi{lOw*y>WmKjt@TZS3=aGC)PBGibG?#$>wu*RuQ5SCAis!5SB zO+GmE4E-1>LPRjR+ZP4?`>=xFtekwfU~pta4(3XXcSu4!<=y%EOo6K-yEePDFQYG5 z`7@hl3ol{Cy6kog4b2k>vUY?Z1`+~Fn8fbN)hx6P#TsV%Qm3wwb>GW zQZQ!9xx*CKeiI^k5t#$8Y?XGTG#4Uq_;5pS_ws36IX+}c{iL;iMp&OSoUM7hi19w} z^tl31xtt_sf};zgs?;roj>oWcd3@JIvkb8$m`t&+Z&~A@`0$M3!6i+F=s&ZFF%GU{ zc?S`}0d*hD5Q{yS)?)6L-`Q*OHllvUFwM^gt8c=otaoQJ?iOcnvJ{IVuD{JQSIkR6 zmJtX%`WHgzW4Q;#Y^7m*tgB^2h%TiGJ#BqQAjw$`9^e~KCK5ukEqxrgi6++(rhs=Y zYNxdSjyGF+2V6TMx$zRSATx{b7DU$@+NOz<*VE( z_@Du|JbQUH!B2ljLF5bjy%2d-S9-RY0^~uFwK*f&Pe!v`=+7v@Qm(yBt?|c#*%Ju3 z>*ZnHu4SUz4Ex{?I+?RtVhfm}(s}XjElj1&eu?O{GT}WFfXh#droXGU2Tv_yF;9G% znVp6AAto~U`nIT8rHZ*}rw?&}__n59e{?ye_Sw+2EcD ziO3?4t2*B@IgEjrPKY}DOMDuMGQdqpn(em=wcvMj5%TGP)jc(*PyDFy&bQA{I1n3jM(VOohE|*iq zwl_6r-0K|aM-=qygKW>E$j3e_>;5i;oaMn@G^Sd;`VJr2EQP!fGc*n)7> z=cGSYk`5G5nv5-2a!bRlXB4uZHEJb=6>uq`wu5oc_cbm>MY!hnM$vx=ncMO_v^G+< zP!Pbf%Zg~!-(`sosO?ikmF9Q2X5F1lSF{wc506-6)toWB=ThR=)CYb~r#jg0{U}Uw zjed-{2-&NlD3i*MInQq5R}8WETtOh$P3NLfJ<2M!9WH?Jr?6wc|E~HI$#7R6)wQPM z{l(E!qpyTy_#6mTH2Ho|p`rS~Z$mxOjZfH!HD`uNjf?f1EhDP5m3Wb4e!!CUrm~l$ zr+O&NYp3@m-H`>&A7p57`~BFZt>7-M%JX5xy}=m%1pGZ7VlKPsxZwgY#F?!X>OiQuDM4k%4Or64J!N9U{~!&gOFY?qC-1gbV?`IY7OqWRY!P> zz7{k1&;c7gOtuRFi(e^g^Kf+kW2$&*KJh^?$c=!dPRKNM4BbB+6^#Gn(@uWz!;8_h zWq*{&f96uL;OkAd4a!$#YN@mQ`5CTWoASJ zBYFM_Phpm2g1M0b3$#ux2Usk`lfzli_^saeKQfnchr3Q1TLb?QU2K;1-o7p@w+P^p zo30nw?@}|DftYhnAsLt{1+3{W{M>IaL`#$z8R4waqcFVT89wpsmCi8XYJPY#``sk5 zlha4Q8Ow6q*1NyS**xS=tq1YT&o+Di8@((EiD@VTH+rmRo35cZtagHiv&WTRra$q< zyWd}wpH33y|G+(66B09Y&VUWtFm!)5rR*kIpGb_J3i&}xG z>)ONC-umRYsHq#0)6KmAs8rD_%yzuRDkR2&_Bz68yrM$0r;L;4QCJ zSEex;Ge4O|RBqW5s=O5>>%n@qEO$*k30c&c0LnAvn)?V>-ihXuZ2pgRQscH~wF0t9 zrQ)E4)BN_W)DQ9xj}&Z5x6sgR^(8 z*;xc38l_<=?T_(@{^-V?0vC71hHwPCek9Urc3hQxM

>k9`F!R6On$V6lVK)ZU02 zw4)f1*Lg0--+YIOuGa-8<0@Lh_FdxUox(=aeg@V2NH|kzY$1J z=LRL9cWrId3anB16wTGaTX(GN5>pyx`nG?D3vinK-?mA>#G&7mu`oLqmW`dUG#?#y zCQ9a(fBcHhy0s$nlfmPUbc?8L;jrW99r!bfKRh+X=7bhnSwg*m89KCj-ZZ12OgI@1 zngNTuRySLNm7=r+-juX~*-KKD-0d^gCGjo#O+$nPKfPYpJ)Wv-AmgAr**1C@Jyt!$ zN^F%oGnzk0$Tbf7Q6m2Ej z0H!gX%2m!tqFI%+6|ZnxHz2g^JP|ZaMys8xFz~WKD=CWwQ}5yMJpgU2}abt$*T_-gjewV188hD|WJt!vZ*kE*;i40A;hJ_7OpH%sDoJlw^ z(O0U9D}o}kXR`t_4W+_7%x^ON=aZBXgP7J2lq!j3jHC;W!H*sr6=?dbZbPx&OBlo0 zMZU#|T45O`ecxAwiXP{&U!(gV`WC}~w5Yfw(2n`Fx_w`x1n;-?l)@A}l=@zhoT6-U zFV?DGUx{}AC=Y%0n&^@IU(4llMS{`{Uly&3 zcy}2#A<`Zo7w~D1pYLJYfWHR3Bib-aqJ?KmfNlzgkhHTYAsX~TXb@7q{MwqYxos(C z#IJV2g4kQ419=s?qiToj-lMruZl!DaN$Np6hYPykIcxH@3w%u=Gn!(r;q{cc5qHKG zI4H7RDQ$3_4T;v`XK*N1Ll8v=6z^lL<0DL=nNWC%djf~+nL&1PtLiKXj3xJI!Q$zu zz9$TFH9{$jGw3>nQfR^CP}+7#tD-8l|K8ObzB~v(l3!S*X^-95$bxjwFpo?F+7U1^ zy~|loAQ(0rg`okl%K`f&BhltYn8B2#ztf0hFGi(?`2R>q2gLv$&O}0d0T=KMV4qkM z+;N&#V1|MbrWhlX9n~f+DfV2|=qlwdyw^2;@jY%W2ft}oRo=6VhH~ZC5cOkfsxSWHO-l-^N-RbW3j>mf`YKz@%0LlIAXRinKh3tfTFSDl{mB8PR8{~W_s_%sdotC z8J`@AtsPdar+}^!H}L+R)cM8)Wh%{ac(P)k)%_fgg><~Hq)6XscT9Gz$3q%Q;|FkQ zdV4gKp-OgIR34}dYPyXmZ6oA7?IlCND2G&^EvZ#nSr}>}mu;7+m67-y7ai`EJDQQ6 zX>k(WPRRMQo(-iONNTMgb;pe|Q>KrtA~Ax+94@mYtf!n+5yWcgE;`IJ*A�(=l^g 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�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

lX*sSY3{?-2wVGm9>G7H_t{=#;=EbqE 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 {F$kXuF4zNKC_Y@Ylg( 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�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

3X~UNXw{$YeZ#UAsNK>lFM0?cC+n`5)@9sA% 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 Zxb>R3gH*=X%Q)EA6Ak^x4QkJ${~wVr&?5i< literal 0 HcmV?d00001 diff --git a/docs/images/img-7edges.png b/docs/images/img-7edges.png new file mode 100644 index 0000000000000000000000000000000000000000..957433e385c241403132a71bc8d6d043f70ca997 GIT binary patch literal 4657 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-alpha-0.png b/docs/images/img-alpha-0.png new file mode 100644 index 0000000000000000000000000000000000000000..bde6f53a82a146196171a5f2f1a04efa6afe3051 GIT binary patch literal 3806 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≤W-njB5N$@Uu?}K`ZKCAM^ z!sU$gm`{CL?{*-=M~OqI57sr&;kg!zwe3=8rqm9xqE}(%ozbx|IFX*l@16Nt zlW7wsDJHm^Tj>;NV_b=oQ^gyuu|EF9L0_M?`wg2QDPi_@hGL*hPEJl|Dsv4;ICto( z_-BvfU|QsMz1L6B+3~hu=B2FLl>Xr%&Uf2PTwU4To;&>cb8)+FD(zG;=!z<$aEaFU zNfiS;_}OSLdBU@2fJ!2A({q=4g@nGf&Q913StWT*Ev*QsdEHY+HL>{k_}c}jO1|Rn^qJ-@Y&&wM=Z;5+mO>DkXscYwvV!nR}he13iww* zT^Yp6^V3D(d1nw_;XU@EtQOlR6OM-2a#@&{vYjwqMqSEhcGD|tfos2sCTIn-s zLW>(bdIV=T|Kt|d+NzW$^F+YP*bMk@j`ttl;-6uj!phCNH}H78^K=!@+}zya)|QYw zD)&mI(Pxts3{DB07aa98HZ~q<2tS+68(Jt0`&&!?kFfmbfOC={Q^aiN{~-%BxVUek T6)$@ICk1H0bz$Wy$ngIHEg&pD literal 0 HcmV?d00001 diff --git a/docs/images/img-alpha-1.png b/docs/images/img-alpha-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0f3e077a9d1f384cda74f2bc5d2fc62fe154ed03 GIT binary patch literal 5246 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-annots.jpg b/docs/images/img-annots.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ff17aff2e80184ed7017b64caf57888ecca5698 GIT binary patch literal 68554 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 Y->lL24=M3H>8+h{I_IC8$$roN50+p@S^xk5 literal 0 HcmV?d00001 diff --git a/docs/images/img-b-is-0.5.png b/docs/images/img-b-is-0.5.png new file mode 100644 index 0000000000000000000000000000000000000000..4f256dd22988345bbcb3ce9ecbd8d2e76f7d99a8 GIT binary patch literal 40594 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

K7eynmN_v<<-fR4mMb;3o(Y*eHU;5no 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-binsetupdirs.png b/docs/images/img-binsetupdirs.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd036b2b95d049330a1a97cf0629998f962f916 GIT binary patch literal 1379 zcmYLJdpOf;9RJD0gzQ;q$#RM2S}esgbf|@8n@h}XR4!AFxg<8H;}p5H)cjmCwQ@=2 ze(ABaq{#|(T%LpDGCZ`_<>VToLw4T&I^XZ}e!idY?eow3yf4Rt>Y}cytqMVqI?0vj z1!5XF-71Ozhv<*qy-&#Ha)v+-G6_tO3jhTG$>kCPEP)t+0xpn%Aqfl=cGu(6T?uqf(;> zDTB8O4#O|(IU1AS?p|CnR6tfcxGc)1EK`*>ir6G7 zb|a&0NcqKduc%Md7l!BIA5ypxU#x~NyouG?ud?x8=z672G;KXmQjaygf=WxdIEAAu zuTzp9VG#a{wFV*y*2^?|KW-sMGRkI- zWvE;pMd;pQW2Us{=Bs_knkt*J`OMWTU7v_- zj`Xg}m8LUyo>wyDd!(KHM01XGxB9sp{+l>oSS`%`c&t^LJ@cN8>u~6f9|#(w$23-% zC276D4&Xx{w;FK)~fhU5Jcv__m$YIZpUkjOjSf$Ux1BP$ilS!KFJL8IwmrQrvo@dcLY6DC$4BRh&Fapk6Lz<4 zIaz}Fvuj?{$zIpi(*scrZQ5h~&Y|0%Um6pyWSre+Bz6#)S`$4|!r!UNN`HGpd@LO| zwh$|gTc(%?S%BdliAAk#Ha1qq{hPux8FM)dhb?pFJ#hP&1% ziwoiTeMEdCQnjxAx+PGRCwOSz>m+(obrmh|78^(6oenH0n0A53rZ$gY@UxH{)}V)r z-qrKia;RaM@N3Z+=oq}Prz(LDK~??@q4BPYy9-Xu}I}CGr?FR@)gbQ iNF1X!5nNT+zv@a{j!@6= literal 0 HcmV?d00001 diff --git a/docs/images/img-breadth.png b/docs/images/img-breadth.png new file mode 100644 index 0000000000000000000000000000000000000000..6b39d2e42fd9096bb5a354945df0dba3458e6422 GIT binary patch literal 20516 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 G{(k_;t#Jha literal 0 HcmV?d00001 diff --git a/docs/images/img-c-is-0.5.png b/docs/images/img-c-is-0.5.png new file mode 100644 index 0000000000000000000000000000000000000000..215fa54bd67078a177f8e0f64317eae4dd57f4f5 GIT binary patch literal 22178 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-cake.png b/docs/images/img-cake.png new file mode 100644 index 0000000000000000000000000000000000000000..f1151dd39d621280da3d33ac95495e063f0ee08c GIT binary patch literal 9163 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 MnuZz;Po3lb2Q*p0Hvj+t literal 0 HcmV?d00001 diff --git a/docs/images/img-caret-annot.jpg b/docs/images/img-caret-annot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5889089dbf646d0875a2b96c560075ca4cebbf5b GIT binary patch literal 7925 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 F{{f@?P2d0k literal 0 HcmV?d00001 diff --git a/docs/images/img-circle.png b/docs/images/img-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..e87aba33bc37526593f61c879e25b02eb20f3b86 GIT binary patch literal 23679 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 TxKBK>y zCwjhrD+_xHuFuD$=l{=f@~+hW95#jR^LwMpM{X}<8`Wx~7h(ZqAr RdM`USCioLG&-!33{{m9gw!{Dc literal 0 HcmV?d00001 diff --git a/docs/images/img-colordb.png b/docs/images/img-colordb.png new file mode 100644 index 0000000000000000000000000000000000000000..91f72a57aa57ee6bfece62a610c881fb1ea2445c GIT binary patch literal 70022 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-copy-speed-1.png b/docs/images/img-copy-speed-1.png new file mode 100644 index 0000000000000000000000000000000000000000..caab390d5b5395daae0ad96cce6c2967117a4f9b GIT binary patch literal 24111 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 F`QJ2B+lc@G literal 0 HcmV?d00001 diff --git a/docs/images/img-copy-speed-2.png b/docs/images/img-copy-speed-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6eed76e57072da52ccc9d207a7ae8fa594859e4f GIT binary patch literal 22922 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-d-is--1.png b/docs/images/img-d-is--1.png new file mode 100644 index 0000000000000000000000000000000000000000..2371c490d8e8c951fc0ff3282d4c360875c9be48 GIT binary patch literal 23581 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-drawBezier.png b/docs/images/img-drawBezier.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b680fe3b93720bada796ca358eae84a5221768 GIT binary patch literal 10498 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 E2fnFnxBvhE literal 0 HcmV?d00001 diff --git a/docs/images/img-drawSector1.png b/docs/images/img-drawSector1.png new file mode 100644 index 0000000000000000000000000000000000000000..f3afb947b71f1440397e935c6e2730738436117f GIT binary patch literal 7411 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-drawcircle.jpg b/docs/images/img-drawcircle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8b0a8e8622f252850ac0824eec04a75d4a06e00 GIT binary patch literal 14820 zcmb`u2SAhEmNps$1f@i})QEsc7il6TDjxzOARxU&MMOk8NDB#yfOG+YPe4NN5T%zu zqzkA>?Gt-eeQVezRF?@3q%@*4j@f`7X+mkDXlX73 z&alzYve8gF03ZN>hMp?zZ-M{MMRSHK<5>pAbLW|;H`H7JoS~tmJwr$PTWadv!PI^L z9UDEnu>9?_9LA3sE_-rbf1QxcD01gZE0@UtPE_HE*PCACX@Zy(=Re*OW0p>M;&Bi=HWuv1PmOsmW+nC|8C&%UM zuNgV-BxHYSJtv}Ig5!GPHE^C=R1qVF|E=2JH2dcid-Ffi?B5mpzj{pqm}zOKi$}`_ z00T&-IZ;;u|9x8|2IFnoKuj;S=b})z9dqxtd+DfuOu0?&a7l#|7?q4;3XY#tbS&mn zOpF@apV8Ft-@zL7;Lwvm;v{brTApU4t;x-Tj@AjMsXI zs&li^!ZpS!e+Olvn=c~tV zI3XfHtP`TYP{IXMGvb$b{aXe+5fEjA?_gT{XdPuCe(k=IDI8>(yHsY(~+(PjF0+)mk2Hk%itJwmr~QN^m_#0fb1xtsw*l zFu)f6?e0cLW9#;)wy{x?q4h3gEr(Sfr2l zM49hY7?`lfXY^Yn@bUnRD$-DfkKRFoHzQS~>u~F%z^f-quqt!~`p*`mex4Ea?ceHZ z9aqQ4URWxD8`{M3V@r)F2y@!;++M@{9Bx#3R`3|=I}g0*FXukjgfLVw*Bax{&RCdm`Go@F ztG>e7&j48nNd1v3u#}z~dKAFLbXG8%U30)(9QgNovhgmCL4^yZ?Z8)d8C&{)uct;C zoWm#`sDWKr-64SYn9SmSfbGC?yBh3KI5~n7n$Mr^7{LO&`Xc4kM(--@s&TPZ0;$t` zuLHfkI0%ZjS0lLYLLU%(JyN8Oh}sx#mC;A=04x|489b$-!x?OYAY3=uognq^*9W;l zVr}q{vErR!3-NhS)a(U9{u4K%6qZTmnG%2I4bhG-@rMg9Z^FNZR8%&I@!sC;u}UwN zkSgFb*4Ax{x|((7pKekL9hp}Kp`hI9^~u>>_x!cmjYgZ&;xm`Y;>8*vi-!eCZr?0w z%Z4gAuzp=T3{a8USd?~Yo=TO&=A>i2g1s%f2c4(fcQ5~*uSZCEFbDY(5tdL+=Cz^# z+C=8Z)F54HBMo~MoQoVzZsYw`b)fA8yPbB>#9kYM*)4zMNtCN!r;2#+*t>(&Q|-;~ zI-+X9UxRrBtJ1a(ujQ8eA$QBk?uA%lj7DAwoW*&D{D}e(2{$lZ0C!OU>G$i5LdhIS z`J>qv>PIUsEF?#7wTwi(N-IrVCbG~eF_ z@&%lx9au|>MW)+Ulg1Arr8C5CK6$ia4eYTtr-g96u{I~*FB;7fiq!?&K~O>)RGu(1zZ0D@s1o7plXfUTD!gBRmcP%7 zl`-+kaX65dSLk47>?6^Tgix2j-&~h5w=DRDGJWYcNr=A-ubOT9>Yp zH6n!J&T7{Y(w!)PbAF)@wv70m*RK4mGY(-{YFrW8M!``AkS}5G^BVBvo!wwK!=h1j zG8ikPh8+8{Z@~2tgXVD7yf&~^<-;jXDjWkJn~;={A+yt{A1n!!`vwA4nCh$<+4|%x3YYCA@GgF@B@a|gu;0t zB<|E2(K&b4?a6?W>eIa%;Q48JJE@0)Uk%^)toFSoul8s}w1MOKR64IT4ldWFx5KUt z^%!Wi2d4IU)3TN|t9R@>Zr;814S64VgHVH0(IQmTrXr+&<1$!G-y+kh2UA8 zIirW_UY>8f?Ru+SWUWv4Qy~an0`lvM&x}eS-0%36hENm^2_QO-5&5yvZ~)OpKS;)F zerr%&&#g(?H<{t$ew^D!LmKfIN57zQ?~!~-!@-TJRT7J^l9CVA5}rJ#{s8=!EvEIh z=sc^QV$B{R4r*3J9w5s#6TIg)8eS543-y)=r5&~1Le4u5FK3uQ3y*(!4u#LgikmgR zOxdYB`1LbynCI0YPZ#I{>h|ev|ERsMbIeGD0q#fXvF0UwHP{#4?D}l3TUdZcfVDeY zvmbYanGMC&wT)(ia7$5^YljQ!Ub_vagSsmniNWMD0Y--D07ZA&-Gv_@|{%88QtFn%>B3h+N^%Vc4w z+Ao-dzx7T#S>%iUmgc-urjR)3mF`qY{ie>)dtKy39K1vB0<6D9xC*DzF*P=fQt%-g zMG#$8X56=@>{W2O3^e@=0-1TiJXZEsaTQ4mu4nhO$E1aa_nSI)muo+Hm1zXu7Q8L+ z=DJi#vLn~#x>P4w$mL|X%V!FTAD{qi(xO^JE-eb(=A^E}YZP@Iern2961*4q8{E}- zi>T{h(NQO^X}sm&HA4%WcNq2@3Ol);QzNcd?v~k)J{T_XUa?D?rmFw-*MFV^RQke7 zr>jGA)+{re#7cs6flyg2Ncn-b3cB}yQ3Bpr@6YXDzyQl!Es08`rBR!3E~dYCY)28 zYdF1r&UI|VBmdkrctYeQ7!?vhI9ooAvhckJAAgJ%7V9O+91QJ=Rv4*g0yF?Z%T0}w zHM&z1CIk!YDSD{#_~TG0TKxzf@!nXQ>zmtuX|(^HG5;6ud(Uc8CB!SV`H=UqcRWTz#=1-Ah zjmH-sQdLob#3#%Q*c;%0*xKv`1F$h}ELzwAjAaO)wq8FBiMcPoYp1iG$Se>?qxsfp z)P?WE(mg|V#kU_8zQ2jOS{8l&YEH<%HP!e?$c1V|80_2#)Tms4X?*+-+bj_u>_YDvmDP9P5-JrfQ#{6IF9hC%pG<;D}>tFtKIO z{fkiiS7G|^`)IImP>bM;0m#}M2a4qkLcre__|fH?oppCvEi$fJeB2Uy^S9`yP?(bJ*w)n(@tNgmf-g5A?Bj52jJ;8l(4r~=< z$hpt3tVUl!fLEIyx?|&JT}nt6KVGTkpB8)X2T=fsV}$mAHrLnx8z}<7TY`8IV;uO+ zRyC3psL}0#gNZoRm8MOgJvpIYE){aKg@*!U@BcmeFqcmKb>PGyzIg3 zut+S~-=+XS7WxO`k2Ho8MqH3UEU?Cm<-W;!C(1YqC@J4Lr+3N z5n-X#@217O?&Jk9^K@-O`5%V*eITZ52kcj8GT&}@b8T?#t#oQrRh7c`wa>9XB8^2r zbsca=kqNbtX;&bfLc*CEK%H3NcQ~nnk?X3F5%^u++C+WG^08@D9IH}AmAoVuE{c+N8?z*3T_m_zaN0aTd&EzH**!Bl! zU)bL97Qtmtb?tQT16luo2){%PChu1NZNvR}e_qxws>HTn(9y?^Ed=Q4!6D zpB&x?m4>;uHGn2kyHi_~2#?*J%a_!RF>8yz4&F@@+px5Co(I!SHkx@S7G)M8aztzR zWM}H1)u2djUcoz83SXd3S@0m&@4=`KQX%*%6wB(Wa)X~DfHMQdqWur|`4?`vVosa-!@#&CXT2s{obSGnaFxg)q#n=tnr z=~8kMhd5haIAdjZSFE-nGCM_KAmKGL_=17!-NMRZ-b00AA^-X#Nq?sf?o4Uic53-J z_@iUdWVat}U~Z8kiN$#=9QI9RZ-S^atj-@SoMeJ?L;7X++UzJg3;QEh&Atlt*{>Kj zgB{Hu*nwqV8`|Pb&g0y9;GNE=5PxxMwrk~r(Kx?jlMH`rpvL6GK*~CcSsQI$MuFya zsdJmO0PpJOQrY2B(hoi}({xwnaYvM9*;hp17;w8JSxv6rsHf^?V|{lMu|@++U1x=? z{~Z7SXSnF^$HBQ%ivyiJRH>(^Qd_uSf1Dq(iG;uXLCfz)OUhwg*!Y{&3!kY{yDz|7 z!CZ3NBM17iXE05=ve_LkU@>{|fk#oB9YMXH3^#U%c6C?sb3X)u`;9AgKX(nP(QDIx zjK9TTYR`Lm@sBYGJx>Sw8(DRo(se#m!@AYB;B`1-XP{2!%p(FEV-$06&0{oBX>o(R z`*jhPWzMrXmK)174-ApHHE9^@swxyKc@DU~{O+{gS#t|^jsp0~KU%qKw67ugdyYJE z{<0eOSCz8A?4xZ%za*rM&FA{Rxn$5Cp%e_Zh!)fmYrCR@5k`8)X{RYAT)cjbx$NeJ zK)yZrq^S;6<09z8L_o$)k;z6u;+lkrOAtYqJUb)~#!u`qDu?>C>8CRBii@GoV zG`im(4zB@sfWmH;XVgtD?L>U&OE6zx3Q}d7M zru3X`-Yyqdiw)rb)2z^et{vON2o*bW?Z0}}NZLPltv3(fPOEc8!>oaK^_Ir1Y+2`` zBlLVaiDp8(ZiqNYf@AtU#x#|P>bU+0pK`b*ekI)J6O%cA^_I!0WnK6v&OtTY+@sR7 zzt@PX*%Q0PI@Y#@wK^!*1hJMQr_wDF*OjWdPyGVAp1cYOg1Js~ss0F1i6KkaS`$55 zaPUwRFndGuT4?*17l9Q>tl$IZ2eIn?m$lCS5UlB_dSav+^}%xJm7gOXB2H9mtZgKv zY0~E7sx|4|qgCWzT(g?4KJjWj+}Qb2_$Q~-RCIjRmUOlrTLyCs+tH+csUCExZ*Oeq z8LAD2b=^0@MW^;@uQbARM$_E4Se&u_abyl0`t5-oZAT_>6slVM;z#LP>g5d;?lEpW zonG$y?z$sn{iBT6-&z^+2o`wZ14sm!yBQCUQs)Xlx|r&_(szgXvYfaQdw1Ccb9JZk z9}7IKjCpTj*oJy?BFBg%az+>?Y3s9L!*N`@8~xA0{+71Z{GO@;0dEw#V8P+)#3rdO zO@?nN;HtSz-y+-V?T!p_6*(zbt+zVKzBh7Ag18e#bc!FTjhG%4xBtjL8qR==mhTGw zv9JYlgcA#Y93!&yu&zQzY2%6y zE_84oP6o%ft!^r%kIRnAZEntd8+3o4@kft9)G^rSf`JQ^sS(f93Xc?GBuHV?Axwml zULfnVJ_gSHTzPqPmxl)z1mHCiKU@mBx;`m_#%(CIOpF&Q1 z!Jj`SAuC(Zua5*djqT5^{j)LtBItrNxCY9A)t7eKy6O1+#=#5+a09|h1QW(c$@5^A zi2%Z>a=I(4!qCfm;QU~GQRm9qkue1Ty8`*n28p$He@Bef9Mzcf5`%m@e_~q@g*?}} z?{c7?;j3e4?9#ulhKNG29>~4XyfIAFD7Vpbbv%p|8*-m8O7f+Zca&Uo@Sr;@80W&@ zZp~Vb7qPFwt%S)SOhmfTvVoCOkBw%E7&9xc9{3Qd%cv1l-csM)A=j%5`+ z{It0PYxY5ZKX9IZZd$Z{M?-nla}HMsWtnQTzDWTzIbI~+i6@x0Fm7S&B;YeO#>B8! ziWcbyQFA}ZhrXwh@ZOe%I4Z&i&m&H_6$kc1sB?ZE-U{EBwWI*%7>F)ka^lO($$m$l z4Z&$@Hj*JiJj7q`PPRE1(ePAsN@Z?OF zW?~N&YnVyJhmdJdBQi=7L?svH+-DUjV~Ogqis$DU7?&!uLwH+PXqD!S|372&p^Q$i zK_&6khe`esUr+3tlnP+qPZE_{BSbkqH>i2tT3eOuBmYFOivHT(H^-GD4>cwdDtst_ z>$lxi6QXtPHKuI5*$s6>69dQcj7_&nCMukef08o5$wH5_$=}h;>aw*CcX7cf@1=87 z_#vOw-v_XLYhAQFyf(?3Y!%X_OSdZ_O8S$0Q6Hm#@x#TI5}w8gauxhJk${Gud^**n z0DcT1HC%?T79K?Xu=+vT)X3myj8aG6CVkZ8^*76P=4*rYPFwKVd zceQ9{iVnjGBoMB|$8aq3GUNzqR1945w2S2oeo{yM7ZH_(#L{hbrv*scDWfI_p+uh- zrS0oqd;MZ|5@cA`Y)X*XNI{CksI&)ZqX5S1I$?6VNOe7N;^h+;@1<`|+ZjPuJkaK< zhe}5yTpN$8GR)ayicJISf|{-OZq} zfPOEBT7YTE{t$`?bP88j2*z`CrGdhHo(9Fjzs>~Lm`!hG+h3O}m6rYrdt`=q-S~b~ zlZn8NQ(jPxc={baxqIOnanH`Yrl6oEcW!N$0w`^IqszbAOWn0McR}N0Cc#>Vp12R* zp59OExUXlg$8vSNV<7Evqqr(~kM&>@6hOk7hLoJru@c#-hFVAI`ll*&0pgt$K$QKZ zU&MfUL_`a7-B5QF^nq+eTw&Rry@|D2^Be`membwadkVY`u@`hhWi3B5)ik(ABLvlr za6GMnV(91t2z_BB@pd@{;IKAHYS$}R{q@HaXM>qxlkY!3DMcGg(p$^dV$O-|UHhcc z1q{o)JPH%`7stxISsr?d*9m9e?x}8m5#YLcz%PZAHsCkl)BV->XTnH_+c}eb53hQ} z1u_@(55lJ$0;I!2MTj4F)FF3nqtJSw%vHR;X~-HZmhGY+9UiB8@m}2VM`2T;r86p% z`b9)Z(!u_+jV~d{1#LsuI8~d8Lc&jjTG9hDQbQ;J7d>BhF8_@-2rh-dgB8ln^S6g^ ztfd{j8IM-6+)cExy?t2vCQ)SbWu!;XC5-NJc<8AP(Y%fT#-XwOkup%B%!_!LpGhvo z&-q;Q2T*U+MlDU2rD_q+{;2F&rlo1)hA6$84KA*x0N%AI;}B8Ra~x|eJUD#IkocF% znn7RvPx?NUcl(xm)Kf-JIiIpba|oSM%LJ&62c&eOf#0b(RE_W`by9bXsCFgf$d5%4 z?da*??JhlQ6A%<N#i^5W4zWw1XGK28v z-(VvCF9dnahH7Na3({ItjntegTdLKquzs33-R*wu!&b@z2e@4F{Tn@9;%{NRM12C) z0C=bTC8yfRlDPPHHIX%^{s$!c6@#Y13O81_Cqj1RZPS0)p5sj7II~?S!eYuv%6Rgr zEZ-gPy+#2f)*c)MtvgG3_u9;KZ!cC+06mG;F0R$8bD=jI%FvI2hK{pPfn`}sC4ri8^yGF{h z5)C&K6cevYkk?*`43B;A&&4oAs%zsHFrc_)^x#r0t{}a{dcDQEk9OL?msz)*PUky~ ziU_;V{UVVRq+@x0pS!Qy9Qng$%SOP_+DivmGdnSPZf z9{dc(wLp;d-~$Cvvv|Y!7+VhyMVxniM$n!Q5I>*P682Dl z-77_FAEOEMlQ{T95Lwi^zY}>5^ubwEy1wBxxWV14RMcVL{bw^4#ji(o7Al85V=^sE zg)t}>56a^qhP&to-OuCaLfb2wBLKIpwkhM|TJx{>3 z3I&lg*UY-m98?oD;xQ+nPNyjj6~h~a-wDqocXqaHX9i-h;3K?AE{oFnFJ4nltJIu& zL%Wwnh64Du{T#`NliRvIPXfI`N!rA=`t-K_MSa$K#3y#92tzEvE390s*HwI=^U zb3zkM~Z;j90!NYu3WqmccSPK7xoAArjNn%+O)& zb2Bs5r#|sqgx17|19L$wW;W~j4b%2f(^7h|@eFO%ki@M?z5u?i>+D#@fug>NTh5vl`^ z9kP5nuX97N@)qk2&29k6`Sd*1HGL)+ksIwPfHm8ZL#yp8;Zih)`3!|BtNpYxxh8Q} zJd2yrrgPNd9+7zRzg`DJ(hzUIaY+!KZX@! z?{YPKZmCP0#B#6V8=wBAxkc`GmxaoGFO=$q_q@w9E3U%wT4mR1+&H&oKh- z;%-(q_od%r<^|G~1THtqx>_XdUVfk^71XDfh#kc$rAXweTHFPc(oSEvUA*!3fBAHw zNDf)P-zOE_*N`|nI;)&wm3QNzHeD6RIN)3skeyUq)70#J?-!Zpx%YLK7UhOhQ6%Wf zl+k^q;qG6q#{uh14hi;sS*s~9z5zv&h+&v(nY8OdZCzNP==1D{uv-=puzv0&q9Hyt z5_Wyv<6FXuyfqkqxUX>5&}E0yuZ+j{E0{pt0(>WDnmj>G##t>t$w+vUJ8C6=N5%MH zYKY8=p^|vme*N|XT&CuOTS`A<_YBc>`lbBe>}UN&d96eqnSD6Dpj+x=I`xnt1lDg| zv(gUXbOD`JI{vgcsAW%Z+l6UP>$OMrB#JAXR-NyKo(8pLXlWQG* zCv2JgYoJ1TvG*2fsVcB6NFtQ>Y1MHMhSYUX)c|cONo;A78Q+qu|-^mN5#}xYQ z68TZ+Y?BMp6;!5!?A(}JL6`pwge@EzEm5OBVC#8K6z1lcf11Db7bkAN$3W2@hK(RK z#R$1N1o^D{Ygfv+k2+G{dmqZk*od7Y^CX8DZw6pW2V3NzCPSJ)g3umh*sMZ~?zW@D zh3|E#G94aS0*OY8G#aHJNuS6U*ELyw`2yJpg^u0vP~&UEO6jrn^6X&0mo3qJ8ISz> zAJF?fuqWYuA|w(o`U(wWd@3Sy;CNN5A@|VLI5Kr$4y;)$=zE93wltFY+F50y9W0X z93wJ%=?RbNN8QU^+=34UcpekrtlLqF&7~ugQhrlppo3)6qV* ze7`-5XtUNwX#xk`c-+VyN4pZ_Dy{t@!2EEy)aN;g8h#sT}MsZGOr@?rycV1R;qiiF&xzk zj)Cut$>60hEs<2hunJ6QZ0q}|_v1m!pA)W2kOpa2qHJOIN$7jsiV`Ig!%s$GWMCt? zM!xv$+~0T*!vhdaf*LmUohA#Rr0*-3OO`z5{A$+x^@2J7;}*f}2Jr4r5BZ)O?hved zR*B?5@)cxBkY-Ggfk6N@y|(0|n&m%WwEcJe7X2;qgnTS8CR4H*2W)FXS6W-EBqIqU zcUNEP_`Ajvt21JDS$W0?seun2&DL^kTHgKieqisQDem8ALzq}#>JMw7K?MmakDbG! zId2aRDvS=&{`%g2i30FTnE0|KbPi`2i`!{Cfk#v`iGCj3blAm41|rNIi1!Wk#1r+X zlt~!>D&jm;#2K@7W+uBTLU#9?pT4J5@bOc3>?;kUU(5h{UnSp?g5;Zl+Az5$a`lxA zKIq;IS%`YjVIlGPzrnOLp$qY}s|YrtLJ)=mxG=6$wC3khtNTlx$K-3=TJ;{b{oOC)2^7mRfS1Sw`~kGuGeV z=oW;v=N9uam)*D&hb=&6AX@|p?T79tgayHwbM`7uG4Uf31yl?xsG(cR`{JFn4z0>K zO_bl5V{Vc1cgHTjCY59QcB*yw1N@XLk*S_8;{Ho9yXCEiH|7%z^I0uV@44Z3rbc{- zO>~lWRH`kNIwcrP#ry@W|8^Sm&%QpGwYOOtO|rA=7c4Kk`ZUEkr@FN zvIyk3fN0x=ttvuPt>iKuoq(hrggOKcOtXK0oQ)?nPETafsouQ9RZCG#egSUZhsn44n z!sUB3CgRPX1V{%cl@_d}q{$-O9Ui-|BqujAV(RK*L_LdEOL9XrlbmSaTJs2-?7*LC6cn6G8=PfmucNdcT?yJxBU8P=crXwS8^I(Jf%v-CzDPM3knsB1fFCcY)&6oqe)Yz;+H^JSjh{3(dU`ZU3x-{` zw)Ls75WaLAkSjN9IyVc6CvvRblj>9lotix739N<*;eUjUwYzhBup%ljkN!Mq^*$1{ zeNUsNx5*N8-%I*SX)eQEUUSp;Iz<(M9}2Z6U(AgeE`KTJE$xh>#uav|hy4e{?w5(u z##K#p+Pu#kLKupX-1vwsy)5e&gZ@EZM|mLZP^)izu(0qq92-jg)3IKRqEF-I&47VAx;T&dv31T$2yjUbPQiCB~o)$ zWrx$=^q^8a^_v3$5$*7a<*9b^C82Bh%yN}DsQ=ux5xLY06HmQTK9k0W0~a*^?BUv^ z+S!QY&(h^|g?Bf(uJg}hBQ zNLXPAa!U*gj413OAaN9c32sxO-9J=|;lU6;sX$_{<0dhWqcafsnk?b3gEc@RF!5~8 zCxZ(zf@Sl)h@HDIN8+uD98?{Z^hSc9Bx-kQG&%70C0}A|snYk~6f`P@ z*bG@CWgyF;v^1=o0PojZWJG^dbfZs`3K;|c9-rU*W(0M74mr!D2T^+9ows7>dss0N zm5dN9qK!!hv-{6_yn06j=k&|k49Q-wxbIQ3Qub(T)j@K20hO>lY!M1?8zuB($?6KY zw7K@fts^<2U5O-o&KwWJ!F=WjRPqBS(R0s#4*R1k^*IFq*Th9W=d<+fH!GwG`Kt##pv$7J~dwGtwq=DvRy& zwR>kjr9^MbDlRbi)a?AmwJS>hf5~aQ(t3)n0`DsCwlkMqXWYMBU+z8c-i~HhP|lx+ z17~_?p1CTsQHgu6!)8tfv~8WPy6`-)eORZH=HGXyMbL3_5+fnsvj1H539>mYx<%xE z0KRt|ij|F1XH&QmR_tQ^gf`^Ts9QIABq!=by0ON(vPMs3eLKLi#N!RhEM8<3CPmoL zpE)!VAmlLnOqI{T@x6-fQRJH=$|PjB=2e7-pNk)a=oKZk5uBka*BcMav>k2OK(JPO zE(9bi&FEVX|H@#~ta=4MEDr|H&rJX^f=d~GNA?%=`*KINk=q3fIA>kb)tnY1`Erw_ z8das$&7eQ;d8DBdo$^=Vv@k(}YjX7*Ede%Ywsw8(^G60EbH&bRlVy&sgXMyDoYF-z k;}C`{PGg9wL~mfv^ufc2ue4TkqTamuhu)t`V5Cg^KlQ9W&Hw-a literal 0 HcmV?d00001 diff --git a/docs/images/img-drawquad.jpg b/docs/images/img-drawquad.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2513287cfea47511046173b7aaba6a282fc9a6b9 GIT binary patch literal 50786 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 PG|Ma&)^1uRT5qP3 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